Start · Sprachen · PHP · Referenz · oci_field_type_raw

oci_field_type_raw

Funktion

Gibt den rohen numerischen Oracle-Datentyp einer Ergebnisspalte als Integer zurück.

seit PHP 5.0.0 Kategorie: db

Signatur

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

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

Typ
int|false
Beschreibung
Gibt den rohen Oracle-Typcode als Integer zurück. Schlägt die Abfrage fehl (z. B. ungültiger Spaltenindex), wird 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: MITARBEITER_ID, Roher Typ-Code: 2, Typ: NUMBER Spalte: NAME, Roher Typ-Code: 1, Typ: VARCHAR2 Spalte: GEHALT, Roher Typ-Code: 2, Typ: NUMBER Spalte: EINTRITTSDATUM, Roher Typ-Code: 12, Typ: DATE

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);
Das Feld PREIS ist ein NUMBER-Feld – numerische Verarbeitung verwenden.

// 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.