Signatur
Beschreibung
ocicollassignelem ist ein prozeduraler Alias der Methode OCICollection::assignElem() aus der Oracle-Datenbankschnittstelle OCI8. Sie ermöglicht es, einem bestimmten Index innerhalb einer Oracle-Collection (z. B. VARRAY oder TABLE) einen neuen Wert zuzuweisen.
Oracle Collections sind geordnete Mengen von Elementen eines bestimmten Datenbanktyps und können mit den OCI8-Funktionen in PHP erstellt, befüllt und an gespeicherte Prozeduren übergeben werden. Mit dieser Funktion lassen sich einzelne Elemente gezielt setzen oder überschreiben.
Diese Funktion ist als veraltet (deprecated) zu betrachten; es empfiehlt sich, stattdessen die objektorientierte Methode OCICollection::assignElem() zu verwenden, da der prozedurale Stil der OCI8-Collection-Funktionen in modernem PHP-Code als überholt gilt.
Typische Einsatzgebiete sind das Befüllen von Collections, die als Parameter an Oracle-Stored-Procedures übergeben werden, etwa beim Batch-Einfügen oder bei der Übergabe mehrerer Werte als ein einzelnes Argument.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $collection Pflicht | OCICollection | Ein gültiges OCICollection-Objekt, das zuvor mit oci_new_collection() erstellt wurde. |
|
| $index Pflicht | int | Der nullbasierte Index des Elements innerhalb der Collection, dem der Wert zugewiesen werden soll. | |
| $value Pflicht | string | Der Wert, der dem Element an der angegebenen Position zugewiesen werden soll. Numerische Werte werden als String übergeben. |
Rückgabewert
true bei Erfolg zurück, false bei einem Fehler (z. B. ungültiger Index oder ungültige Collection).Beispiele
Collection befüllen und an Stored Procedure übergeben
<?php
// Verbindung zur Oracle-Datenbank herstellen
$conn = oci_connect('benutzer', 'passwort', 'localhost/XE');
if (!$conn) {
$e = oci_error();
trigger_error(htmlentities($e['message']), E_USER_ERROR);
}
// Neues Collection-Objekt für einen bekannten Oracle-Typ erstellen
$collection = oci_new_collection($conn, 'MY_NUM_ARRAY', 'MYSCHEMA');
// Elemente per prozeduralem Alias zuweisen
ocicollassignelem($collection, 0, '10');
ocicollassignelem($collection, 1, '20');
ocicollassignelem($collection, 2, '30');
// Collection an eine Stored Procedure binden
$stmt = oci_parse($conn, 'BEGIN myschema.verarbeite_zahlen(:arr); END;');
oci_bind_by_name($stmt, ':arr', $collection, -1, OCI_B_NTY);
oci_execute($stmt);
echo "Collection erfolgreich übergeben.";
$collection->free();
oci_free_statement($stmt);
oci_close($conn);
?>
Objektorientierter Äquivalent (empfohlene Alternative)
<?php
// Empfohlene OOP-Variante statt des prozeduralen Alias
$conn = oci_connect('benutzer', 'passwort', 'localhost/XE');
$collection = oci_new_collection($conn, 'MY_NUM_ARRAY', 'MYSCHEMA');
// Methode direkt auf dem Objekt aufrufen
$collection->assignElem(0, '100');
$collection->assignElem(1, '200');
echo "Element 0: " . $collection->getElem(0) . PHP_EOL;
echo "Element 1: " . $collection->getElem(1) . PHP_EOL;
$collection->free();
oci_close($conn);
?>
// Wichtig · Fallstricke
Deprecation-Hinweis: Die prozeduralen OCI8-Collection-Funktionen wie ocicollassignelem sind Aliase älterer API-Stile. In modernem PHP-Code sollte stets die objektorientierte Methode OCICollection::assignElem() verwendet werden.
Der Index ist nullbasiert. Ein ungültiger oder zu hoher Index kann dazu führen, dass die Funktion false zurückgibt, ohne eine Exception zu werfen – der Rückgabewert sollte daher geprüft werden.
Stellen Sie sicher, dass der Oracle-Collection-Typ im Schema vorhanden und korrekt angegeben ist, da andernfalls oci_new_collection() fehlschlägt und kein gültiges Objekt zurückgibt.