Start · Sprachen · PHP · Referenz · ocicollassign

ocicollassign

Funktion

Weist einer <code>OCICollection</code>-Instanz den Inhalt einer anderen zu (Alias von <code>OCICollection::assign</code>).

seit PHP 5.0.0 Kategorie: db

Signatur

ocicollassign(OCICollection $to, OCICollection $from): bool

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

Typ
bool
Beschreibung
Gibt 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);
Alpha Beta Gamma

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);
Anzahl Elemente: 2

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