Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Wie verwendet man XML zum Erstellen von OCI-Lob-Objekten?

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.