Start · Sprachen · PHP · Referenz · oci_field_scale

oci_field_scale

Funktion

Gibt die Anzahl der Nachkommastellen (Scale) eines Feldes in einem OCI8-Statement zurück.

seit PHP 5.0.0 Kategorie: db

Signatur

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

Beschreibung

oci_field_scale ermittelt die Scale (Nachkommastellen) einer Spalte, die durch ein OCI8-Statement-Handle repräsentiert wird. Dies ist besonders nützlich bei numerischen Datentypen wie NUMBER in Oracle-Datenbanken, bei denen Präzision und Scale die zulässigen Werte definieren.

Die Scale-Angabe beschreibt, wie viele Stellen nach dem Dezimalkomma für den Datentyp vorgesehen sind. Ein NUMBER(10,2)-Feld hat beispielsweise eine Scale von 2. Diese Information hilft bei der korrekten Formatierung und Validierung von Datenbankwerten in der Anwendungsschicht.

Die Spalte kann entweder über ihren 1-basierten numerischen Index oder über ihren Namen (Groß-/Kleinschreibung beachten) angesprochen werden. Die Funktion setzt voraus, dass das Statement zuvor mit oci_execute ausgeführt oder zumindest geparst wurde.

Für ganzzahlige Oracle-Typen (z. B. INTEGER) liefert die Funktion typischerweise 0 zurück, da keine Nachkommastellen vorgesehen sind. Bei nicht numerischen Datentypen kann der Rückgabewert ebenfalls 0 oder -127 (für FLOAT) betragen.

Parameter

Name Typ Default Beschreibung
$statement Pflicht resource Ein gültiges OCI8-Statement-Handle, das mit oci_parse erstellt und mit oci_execute ausgeführt wurde.
$column Pflicht string|int Der 1-basierte numerische Index der Spalte oder der Spaltenname als Zeichenkette. Beim Spaltennamen wird Groß-/Kleinschreibung beachtet (Oracle gibt Namen standardmäßig in Großbuchstaben zurück).

Rückgabewert

Typ
int|false
Beschreibung
Gibt die Anzahl der Nachkommastellen als int zurück. Bei einem Fehler (z. B. ungültiger Spaltenname oder ungültiges Statement) wird false zurückgegeben.

Beispiele

Scale eines NUMBER-Felds ermitteln

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

// Tabelle: CREATE TABLE produkte (id NUMBER(10,0), preis NUMBER(10,2), name VARCHAR2(100))
$stid = oci_parse($conn, 'SELECT id, preis, name FROM produkte');
oci_execute($stid);

$numCols = oci_num_fields($stid);
for ($i = 1; $i <= $numCols; $i++) {
    $feldName  = oci_field_name($stid, $i);
    $feldScale = oci_field_scale($stid, $i);
    echo "Spalte: $feldName, Scale: $feldScale\n";
}

oci_free_statement($stid);
oci_close($conn);
Spalte: ID, Scale: 0 Spalte: PREIS, Scale: 2 Spalte: NAME, Scale: 0

Spalte über Namen ansprechen

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

$stid = oci_parse($conn, 'SELECT preis FROM produkte');
oci_execute($stid);

// Spaltenname in Großbuchstaben, da Oracle so zurückgibt
$scale = oci_field_scale($stid, 'PREIS');
echo "Scale von PREIS: " . $scale . "\n";

oci_free_statement($stid);
oci_close($conn);
Scale von PREIS: 2

// Wichtig · Fallstricke

Achtung bei FLOAT: Oracle-FLOAT-Typen liefern eine Scale von -127, was ein spezifisches internes Oracle-Kennzeichen ist und nicht als echter Scale-Wert interpretiert werden sollte.

Die Funktion setzt voraus, dass die OCI8-Erweiterung installiert und aktiviert ist (extension=oci8 in der php.ini). Die Verfügbarkeit hängt von einer korrekt konfigurierten Oracle-Client-Bibliothek ab.

Spaltennamen werden von Oracle grundsätzlich in Großbuchstaben gespeichert, sofern sie nicht in Anführungszeichen definiert wurden. Bei der Übergabe als String muss daher auf die exakte Schreibweise geachtet werden.