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