Signatur
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
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 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);
?>
// 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.