Signatur
Beschreibung
oci_field_type_raw liefert den internen Oracle-Typcode einer Spalte in einem OCI8-Ergebnis-Statement. Im Gegensatz zu oci_field_type, das einen menschenlesbaren String wie "VARCHAR2" zurückgibt, erhält man hier den rohen Integer-Wert, wie ihn die Oracle-Bibliothek intern verwendet (z. B. 1 für VARCHAR2, 2 für NUMBER, 12 für DATE).
Diese Funktion ist nützlich, wenn Sie Datenbankmetadaten programmatisch verarbeiten und die Typen direkt mit Oracle-internen Konstantenwerten vergleichen möchten, etwa beim Aufbau generischer Datenbankabstraktionsschichten oder bei der automatischen Typkonvertierung.
Der Rückgabewert entspricht den Typkonstanten, die in der Oracle OCI-Dokumentation definiert sind. Für einfache Ausgaben und Debugging empfiehlt sich hingegen die Schwester-Funktion oci_field_type, die lesbare Typbezeichnungen liefert.
Die Spalte kann entweder als 1-basierter Integer-Index oder als Spaltenname (Groß-/Kleinschreibung egal) angegeben werden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $statement Pflicht | resource | Ein gültiges OCI8-Statement-Handle, das durch oci_parse erzeugt und mit oci_execute ausgeführt wurde. |
|
| $column Pflicht | int|string | Die Spalte, deren roher Oracle-Typ abgefragt wird. Entweder als 1-basierter Integer-Index oder als Spaltenname (Groß-/Kleinschreibung wird ignoriert). |
Rückgabewert
false zurückgegeben.Beispiele
Rohen Oracle-Typ aller Spalten eines SELECT ausgeben
<?php
$conn = oci_connect('benutzer', 'passwort', 'localhost/XE');
if (!$conn) {
$err = oci_error();
trigger_error(htmlentities($err['message']), E_USER_ERROR);
}
$sql = 'SELECT mitarbeiter_id, name, gehalt, eintrittsdatum FROM mitarbeiter WHERE ROWNUM = 1';
$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);
$typeRaw = oci_field_type_raw($stmt, $i);
$typeStr = oci_field_type($stmt, $i);
echo "Spalte: {$name}, Roher Typ-Code: {$typeRaw}, Typ: {$typeStr}\n";
}
oci_free_statement($stmt);
oci_close($conn);
Spalte per Name abfragen und Typcode prüfen
<?php
// Oracle-Typkonstanten (aus OCI-Dokumentation)
define('ORA_TYPE_VARCHAR2', 1);
define('ORA_TYPE_NUMBER', 2);
define('ORA_TYPE_DATE', 12);
$conn = oci_connect('benutzer', 'passwort', 'localhost/XE');
$stmt = oci_parse($conn, 'SELECT preis FROM produkte WHERE ROWNUM = 1');
oci_execute($stmt);
$typeRaw = oci_field_type_raw($stmt, 'PREIS');
if ($typeRaw === ORA_TYPE_NUMBER) {
echo "Das Feld PREIS ist ein NUMBER-Feld – numerische Verarbeitung verwenden.\n";
} else {
echo "Unbekannter oder unerwarteter Typ: " . $typeRaw . "\n";
}
oci_free_statement($stmt);
oci_close($conn);
// Wichtig · Fallstricke
Hinweis zu Typkonstanten: PHP definiert keine fertigen Konstanten für die Oracle-internen Typnummern. Die gängigen Werte sind: 1 = VARCHAR2/CHAR, 2 = NUMBER/FLOAT, 8 = LONG, 11 = ROWID, 12 = DATE, 23 = RAW, 96 = CHAR, 112 = CLOB, 113 = BLOB, 116 = BFILE. Diese Werte können sich je nach Oracle-Version leicht unterscheiden.
Beachten Sie: oci_execute muss vor dem Aufruf von oci_field_type_raw aufgerufen worden sein, da Oracle die Spaltentypen erst nach der Ausführung vollständig bekannt gibt. Für reine Metadatenabfragen ohne Datenabruf kann OCI_DESCRIBE_ONLY als Flag bei oci_execute genutzt werden.