Nachdem ich darüber viel recherchiert habe, bin ich endlich zu einem Punkt gekommen, an dem ich das verstehe. Wir können ein XML nicht direkt in ein OCI-Lob-Objekt konvertieren. Weil
"Das Oracle Call Interface (OCI) ist eine Anwendungsprogrammierschnittstelle (API), die es in C geschriebenen Anwendungen ermöglicht, mit einem oder mehreren Oracle-Servern zu interagieren. OCI gibt Ihren Programmen die Möglichkeit, die gesamte Bandbreite an Datenbankoperationen auszuführen, die mit Oracle9i-Datenbank möglich, einschließlich Verarbeitung von SQL-Anweisungen und Objektmanipulation."
Lassen Sie es so sein, wenn wir eine XMLAGG-Funktion mit getClobVal() in der Abfrage haben, die wir als "Val" speichern, die das OCI-Lob-Objekt wie unten
zurückgibt$Val = OCI-Lob Object
(
[descriptor] => Resource id #130
)
Die folgende Funktion gibt uns den XML-Inhalt des OCI-Lob-Objekts [CLOB-Datentyp], das ich in den Fragen erwähnt habe.
$this->$conn = oci_connect('user', 'password', 'connectionString');
$query = "Some SELECT Query";
$stmt = oci_parse($this->oraConn, $query);
oci_execute($stmt);
while($row = oci_fetch_assoc($stmt)){
if($row['Val'] != false){
printVar($row['Val']->load());
break;
}
}
Wenn ich nun load() aus printVar($row['Val']->load()) entferne und printVar($row['Val']) ausführe, wird mir wieder das OCI-Lob-Objekt zurückgegeben.
Um das OCI-Lob-Objekt zu erhalten, benötigen wir Oracle Select Query, außerdem können wir XMLAttributes/Elements mit getClobVal() oder einer beliebigen Funktion übergeben. Aber wir können XML nicht parsen und in ein OCI-Lob-Objekt konvertieren, da es immer mit der Oracle-Datenbank/dem Oracle-Server interagiert.
Um also den PHP Unit Test auszuführen, habe ich das XML genommen und es in ein OCIMockObject konvertiert, das alle XML-Werte enthält und es in die Funktion parsen wird.
Es hat funktioniert!
Dieser Link ist nützlich, um mehr über Oracle Call Interface (OCI )
Danke.