これについて多くの調査を行った後、ようやく私はこれを理解するようになりました。 XMLをOCI-Lobオブジェクトに直接変換することはできません。
「OracleCallInterface(OCI)は、Cで記述されたアプリケーションが1つ以上のOracle Serverと対話できるようにするアプリケーションプログラミングインターフェイス(API)です。OCIは、プログラムに、次のようなデータベース操作の全範囲を実行する機能を提供します。 SQLステートメント処理やオブジェクト操作など、Oracle9iデータベースで可能です。」
次のように、「Val」として格納しているクエリの横にgetClobVal()を含むXMLAGG関数がある場合、次のようにOCI-Lobオブジェクトを返します。
$Val = OCI-Lob Object
(
[descriptor] => Resource id #130
)
以下の関数は、質問で述べたOCI-Lobオブジェクト[CLOBDataType]のXMLコンテンツを提供します。
$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;
}
}
ここで、printVar($ row ['Val']-> load())からload()を削除し、printVar($ row ['Val'])を実行すると、OCI-Lobオブジェクトが再び返されます。
OCI-Lobオブジェクトを取得するには、Oracle Select Queryが必要です。さらに、getClobVal()または任意の関数を使用してXMLAttributes/Elementsを渡すことができます。ただし、XMLは常にOracleデータベース/サーバーと対話するため、XMLを解析してOCI-Lobオブジェクトに変換することはできません。
そこで、PHPユニットテストを実行するために、XMLを取得し、それをOCIMockObjectに変換しました。OCIMockObjectにはすべてのXML値が含まれ、関数に解析されます。
うまくいきました!
このリンクは、 Oracle Call Interface(OCI )
ありがとう。