Signatur
Beschreibung
ocicollassign() ist ein prozeduraler Alias der Methode OCICollection::assign() aus der Oracle-Erweiterung OCI8. Die Funktion kopiert den gesamten Inhalt der Quell-Collection $from in die Ziel-Collection $to, sodass $to danach dieselben Elemente wie $from enthält.
Collections (Sammlungen) sind Oracle-Datentypen, die mehrere Werte desselben Typs in einer einzigen Datenbankspalte oder als PL/SQL-Parameter aufnehmen können. Sie werden typischerweise über oci_new_collection() erzeugt und dann per Bind-Variable an PL/SQL-Prozeduren übergeben oder von diesen empfangen.
Der Einsatz dieser Funktion ist sinnvoll, wenn man eine unabhängige Kopie einer Collection benötigt, ohne eine neue leere Collection anlegen und alle Elemente einzeln hinzufügen zu müssen. Änderungen an $to nach dem Aufruf wirken sich nicht auf $from aus.
Hinweis: Diese Funktion ist seit PHP 8.0 als veraltet zu betrachten; es sollte stattdessen die objektorientierte Methode OCICollection::assign() verwendet werden. Ab PHP 8.0 wird die OCI8-Erweiterung bevorzugt objektorientiert genutzt.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $to Pflicht | OCICollection | Die Ziel-Collection, in die der Inhalt kopiert werden soll. Muss eine gültige, zuvor mit oci_new_collection() erzeugte OCICollection-Instanz sein. |
|
| $from Pflicht | OCICollection | Die Quell-Collection, deren Inhalt kopiert wird. Muss ebenfalls eine gültige OCICollection-Instanz sein. |
Rückgabewert
true bei Erfolg zurück, false bei einem Fehler (z. B. ungültige Collection-Handles oder inkompatible Typen).Beispiele
Inhalt einer Oracle-Collection in eine andere kopieren
<?php
$conn = oci_connect('hr', 'geheimespasswort', 'localhost/XE');
if (!$conn) {
$e = oci_error();
trigger_error(htmlspecialchars($e['message']), E_USER_ERROR);
}
// Collection vom Typ SYS.ODCIVARCHAR2LIST erzeugen
$source = oci_new_collection($conn, 'ODCIVARCHAR2LIST', 'SYS');
$source->append('Alpha');
$source->append('Beta');
$source->append('Gamma');
// Ziel-Collection erstellen und Inhalt zuweisen
$dest = oci_new_collection($conn, 'ODCIVARCHAR2LIST', 'SYS');
ocicollassign($dest, $source);
// Inhalte ausgeben
$size = $dest->size();
for ($i = 0; $i < $size; $i++) {
echo $dest->getElem($i) . PHP_EOL;
}
$source->free();
$dest->free();
oci_close($conn);
Objektorientierte Alternative mit OCICollection::assign()
<?php
$conn = oci_connect('hr', 'geheimespasswort', 'localhost/XE');
if (!$conn) {
$e = oci_error();
trigger_error(htmlspecialchars($e['message']), E_USER_ERROR);
}
$source = oci_new_collection($conn, 'ODCIVARCHAR2LIST', 'SYS');
$source->append('Eins');
$source->append('Zwei');
$dest = oci_new_collection($conn, 'ODCIVARCHAR2LIST', 'SYS');
// Empfohlene OO-Schreibweise statt ocicollassign()
$dest->assign($source);
echo 'Anzahl Elemente: ' . $dest->size() . PHP_EOL;
$source->free();
$dest->free();
oci_close($conn);
// Wichtig · Fallstricke
Veraltet: ocicollassign() ist ein Legacy-Alias und sollte in neuem Code nicht mehr verwendet werden. Die objektorientierte Methode OCICollection::assign() ist die bevorzugte Alternative.
Beide Collections müssen vom gleichen Oracle-Typ sein, da Oracle andernfalls einen Typfehler zurückgibt. Nach dem Aufruf von ocicollassign() sind Quell- und Ziel-Collection voneinander unabhängig; Änderungen an einer Collection beeinflussen die andere nicht.
Vergessen Sie nicht, Collection-Ressourcen nach der Verwendung mit OCICollection::free() freizugeben, um Speicherlecks zu vermeiden.