Start · Sprachen · PHP · Referenz · ociwritetemporarylob

ociwritetemporarylob

Funktion

Alias von <code>OCILob::writeTemporary()</code> – schreibt Daten in ein temporäres LOB-Objekt (CLOB oder BLOB) in Oracle.

seit PHP 5.0.0 Kategorie: db

Signatur

ociwritetemporarylob(OCILob $lob, string $data, int $lob_type = OCI_TEMP_CLOB): bool

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

Typ
bool
Beschreibung
Gibt 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.';
?>
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.';
?>
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().