Signatur
Beschreibung
ociwritetemporarylob() ist ein prozeduraler Alias der Methode OCILob::writeTemporary() und dient dazu, Daten in ein temporäres Oracle-LOB (Large Object) zu schreiben. Temporäre LOBs werden im Arbeitsspeicher oder im temporären Tablespace der Oracle-Datenbank angelegt und sind nützlich, wenn große Mengen an Text- oder Binärdaten zwischengespeichert werden müssen, bevor sie in die Datenbank geschrieben werden.
Der Parameter lob_type bestimmt, ob ein temporäres CLOB (Character Large Object, Standard) oder ein temporäres BLOB (Binary Large Object) verwendet wird. Die entsprechenden Konstanten sind OCI_TEMP_CLOB und OCI_TEMP_BLOB.
Typischerweise wird diese Funktion in Kombination mit oci_bind_by_name() und einem SQL-INSERT oder UPDATE verwendet, um große Datenmengen effizient an Oracle-Datenbank-Felder vom Typ CLOB oder BLOB zu übergeben.
Hinweis: Diese Funktion ist ein Alias und gilt seit PHP 8.0 als veraltet. Es wird empfohlen, stattdessen direkt die objektorientierte Methode OCILob::writeTemporary() zu verwenden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $lob Pflicht | OCILob | Ein LOB-Deskriptor-Objekt, das zuvor mit oci_new_descriptor() und dem Typ OCI_DTYPE_LOB erzeugt wurde. |
|
| $data Pflicht | string | Die zu schreibenden Daten als Zeichenkette. Bei einem CLOB werden Textdaten, bei einem BLOB Binärdaten erwartet. | |
| $lob_type | int | OCI_TEMP_CLOB | Typ des temporären LOB. Mögliche Werte: OCI_TEMP_CLOB (Standard) für Textdaten oder OCI_TEMP_BLOB für Binärdaten. |
Rückgabewert
true bei Erfolg zurück, false bei einem Fehler (z. B. wenn der LOB-Deskriptor ungültig ist).Beispiele
Temporäres CLOB in Oracle-Tabelle einfügen
<?php
$conn = oci_connect('benutzer', 'passwort', 'datenbank');
if (!$conn) {
$e = oci_error();
trigger_error(htmlentities($e['message']), E_USER_ERROR);
}
$sql = 'INSERT INTO dokumente (id, inhalt) VALUES (:id, :clob)';
$stmt = oci_parse($conn, $sql);
$clob = oci_new_descriptor($conn, OCI_DTYPE_LOB);
oci_bind_by_name($stmt, ':id', $id);
oci_bind_by_name($stmt, ':clob', $clob, -1, OCI_B_CLOB);
$id = 42;
$textdaten = 'Dies ist ein sehr langer Textinhalt für das CLOB-Feld.';
// Temporäres CLOB schreiben (Alias)
ociwritetemporarylob($clob, $textdaten, OCI_TEMP_CLOB);
oci_execute($stmt);
$clob->free();
oci_free_statement($stmt);
oci_close($conn);
echo 'CLOB erfolgreich eingefügt.';
?>
Objektorientierte Alternative mit OCILob::writeTemporary()
<?php
// Empfohlene OOP-Variante statt ociwritetemporarylob()
$conn = oci_connect('benutzer', 'passwort', 'datenbank');
$sql = 'INSERT INTO bilder (id, bild_daten) VALUES (:id, :blob)';
$stmt = oci_parse($conn, $sql);
$blob = oci_new_descriptor($conn, OCI_DTYPE_LOB);
oci_bind_by_name($stmt, ':id', $id);
oci_bind_by_name($stmt, ':blob', $blob, -1, OCI_B_BLOB);
$id = 7;
$binaerdaten = file_get_contents('/pfad/zum/bild.png');
// OOP-Variante (bevorzugt ab PHP 8.0)
$blob->writeTemporary($binaerdaten, OCI_TEMP_BLOB);
oci_execute($stmt);
$blob->free();
oci_free_statement($stmt);
oci_close($conn);
echo 'BLOB erfolgreich eingefügt.';
?>
// Wichtig · Fallstricke
Deprecation: ociwritetemporarylob() ist ein veralteter prozeduraler Alias. Ab PHP 8.0 wird empfohlen, ausschließlich die objektorientierte Methode OCILob::writeTemporary() zu verwenden, da prozedurale OCI-Aliase in zukünftigen PHP-Versionen entfernt werden könnten.
Speicher: Temporäre LOBs belegen Ressourcen im Oracle-Datenbankserver. Es ist wichtig, den LOB-Deskriptor nach der Verwendung mit OCILob::free() (bzw. oci_free_descriptor()) freizugeben, um Ressourcenlecks zu vermeiden.
Transaktionen: Das Schreiben in ein temporäres LOB ist keine persistente Datenbankoperation. Die endgültige Speicherung erfolgt erst durch oci_execute() des zugehörigen Statements und ggf. ein explizites oci_commit().