Start · Sprachen · PHP · Referenz · oci_field_precision

oci_field_precision

Funktion

Gibt die numerische Genauigkeit (Precision) eines Feldes aus einem OCI8-Statement zurück.

seit PHP 5.0.0 Kategorie: db

Signatur

oci_field_precision(resource $statement, int|string $column): int|false

Beschreibung

oci_field_precision() ermittelt die Genauigkeit (Precision) einer Spalte aus einem ausgeführten Oracle-Statement. Die Genauigkeit beschreibt die maximale Gesamtanzahl signifikanter Ziffern eines numerischen Feldes. Diese Information ist besonders bei NUMBER-Spalten in Oracle-Datenbanken relevant, wo Precision und Scale zusammen den gültigen Wertebereich einer Spalte definieren.

Die Funktion gehört zur OCI8-Erweiterung und erfordert, dass das Statement bereits mit oci_execute() ausgeführt oder zumindest mit oci_parse() vorbereitet und beschrieben wurde. Der Parameter column kann dabei entweder als 1-basierter Spaltenindex (Integer) oder als Spaltenname (String) angegeben werden.

Die Rückgabe ist typischerweise bei NUMBER-Feldern ein positiver Integer-Wert. Bei nicht-numerischen Datentypen wie VARCHAR2 oder DATE wird 0 zurückgegeben. Im Fehlerfall gibt die Funktion false zurück.

Diese Funktion ist nützlich, wenn Anwendungen dynamisch Metadaten über Spalten einer Oracle-Tabelle ermitteln müssen, etwa um Eingabevalidierungen automatisch anzupassen oder Formulare korrekt zu dimensionieren.

Parameter

Name Typ Default Beschreibung
$statement Pflicht resource Ein gültiges OCI8-Statement-Handle, das durch oci_parse() erzeugt und mindestens ausgeführt oder beschrieben wurde.
$column Pflicht int|string Der 1-basierte Spaltenindex (Integer) oder der Name der Spalte (String, Groß-/Kleinschreibung wird ignoriert), deren Genauigkeit abgefragt werden soll.

Rückgabewert

Typ
int|false
Beschreibung
Gibt die numerische Genauigkeit der Spalte als Integer zurück. Bei nicht-numerischen Feldern wird 0 zurückgegeben. Im Fehlerfall (z. B. ungültige Spalte) wird false zurückgegeben.

Beispiele

Genauigkeit einer NUMBER-Spalte abfragen

<?php
$conn = oci_connect('hr', 'welcome', 'localhost/XE');
if (!$conn) {
    $e = oci_error();
    trigger_error(htmlspecialchars($e['message']), E_USER_ERROR);
}

$sql = 'SELECT employee_id, salary FROM employees';
$stmt = oci_parse($conn, $sql);
oci_execute($stmt);

$cols = oci_num_fields($stmt);
for ($i = 1; $i <= $cols; $i++) {
    $name      = oci_field_name($stmt, $i);
    $type      = oci_field_type($stmt, $i);
    $precision = oci_field_precision($stmt, $i);
    $scale     = oci_field_scale($stmt, $i);
    echo "Spalte: $name | Typ: $type | Precision: $precision | Scale: $scale\n";
}

oci_free_statement($stmt);
oci_close($conn);
?>
Spalte: EMPLOYEE_ID | Typ: NUMBER | Precision: 6 | Scale: 0 Spalte: SALARY | Typ: NUMBER | Precision: 8 | Scale: 2

Spalte per Name ansprechen

<?php
$conn = oci_connect('hr', 'welcome', 'localhost/XE');
if (!$conn) {
    $e = oci_error();
    trigger_error(htmlspecialchars($e['message']), E_USER_ERROR);
}

$sql = 'SELECT salary FROM employees WHERE ROWNUM = 1';
$stmt = oci_parse($conn, $sql);
oci_execute($stmt);

$precision = oci_field_precision($stmt, 'SALARY');
echo "Precision von SALARY: " . $precision . "\n";

oci_free_statement($stmt);
oci_close($conn);
?>
Precision von SALARY: 8

// Wichtig · Fallstricke

Hinweis zur Beschreibung ohne Ausführung: Es ist auch möglich, oci_field_precision() zu nutzen, nachdem ein Statement mit oci_parse() und anschließendem oci_execute($stmt, OCI_DESCRIBE_ONLY) beschrieben wurde, ohne das Statement tatsächlich auszuführen. Dies ist performanter bei reinen Metadaten-Abfragen.

Nicht-numerische Typen: Für Spalten vom Typ VARCHAR2, DATE, CLOB etc. gibt die Funktion 0 zurück, da diese kein Precision-Konzept besitzen. Prüfe in solchen Fällen zunächst den Feldtyp mit oci_field_type().

Voraussetzung: Die OCI8-Erweiterung muss aktiviert sein (extension=oci8 in der php.ini). Verfügbar für Oracle-Datenbanken ab Version 9i.