Poté, co jsem to hodně zkoumal, jsem konečně dospěl k bodu, kdy jsem to pochopil. Nemůžeme přímo převést XML na OCI-Lob Object přímo. Protože
"Rozhraní Oracle Call Interface (OCI) je rozhraní pro programování aplikací (API), které umožňuje aplikacím napsaným v jazyce C komunikovat s jedním nebo více servery Oracle. OCI dává Vašim programům možnost provádět celou řadu databázových operací, které jsou možné s databází Oracle9i, včetně zpracování příkazů SQL a manipulace s objekty."
Nechte to být jako Pokud máme nějakou funkci XMLAGG s getClobVal() v dotazu, který ukládáme jako "Val", který vrací OCI-Lob Object, jak je uvedeno níže
$Val = OCI-Lob Object
(
[descriptor] => Resource id #130
)
níže uvedená funkce nám poskytne obsah XML objektu OCI-Lob [CLOB DataType], o kterém jsem se zmínil v otázkách.
$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;
}
}
Nyní Pokud odstraním load() z printVar($row['Val']->load()) a provedu printVar($row['Val']), vrátí mi to znovu objekt OCI-Lob.
K získání OCI-Lob Object potřebujeme Oracle Select Query a navíc můžeme předat XMLAttributes/Elements pomocí getClobVal() nebo jakékoli funkce. Nemůžeme však analyzovat XML a převést jej na objekt OCI-Lob, protože vždy komunikuje s databází/serverem Oracle.
Abych provedl test PHP Unit, vzal jsem XML a převedl jej na OCIMockObject, který bude mít všechny hodnoty XML a analyzoval jej do funkce.
Fungovalo to!
Tento odkaz je užitečný, chcete-li se dozvědět více o Oracle Call Interface (OCI) )
Děkuji.