Efter at have lavet en masse undersøgelser om dette, er jeg endelig kommet til et punkt, hvor jeg forstår dette. Vi kan ikke direkte konvertere en XML til OCI-Lob Object direkte. Fordi
"Oracle Call Interface (OCI) er en applikationsprogrammeringsgrænseflade (API), der gør det muligt for applikationer skrevet i C at interagere med en eller flere Oracle-servere. OCI giver dine programmer mulighed for at udføre hele rækken af databasehandlinger, der er muligt med Oracle9i-database, inklusive SQL-sætningsbehandling og objektmanipulation."
Lad det være som Hvis vi har en XMLAGG-funktion med getClobVal() i forespørgslen, som vi gemmer som "Val", som returnerer OCI-Lob Object som nedenfor
$Val = OCI-Lob Object
(
[descriptor] => Resource id #130
)
nedenstående funktion vil give os XML-indholdet af OCI-Lob-objektet [CLOB DataType], som jeg har nævnt i spørgsmålene.
$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;
}
}
Hvis jeg nu fjerner load() fra printVar($row['Val']->load()) og gør printVar($row['Val']), vil det igen returnere mig OCI-Lob-objektet.
For at få OCI-Lob-objekt Vi har brug for Oracle Select Query. Derudover kan vi videregive XMLAttributes/Elements med getClobVal() eller en hvilken som helst funktion. Men vi kan ikke parse XML og konvertere det til OCI-Lob Object, da det altid interagerer med Oracle-databasen/serveren.
Så for at køre PHP Unit-testen, hvad jeg gjorde var, tog jeg XML og konverterede det til et OCIMockObject, som vil have alle XML-værdierne og parse det til funktionen.
Det virkede!
Dette link er nyttigt for at lære mere om Oracle Call Interface(OCI) )
Tak.