sql >> データベース >  >> RDS >> Oracle

XMLを使用してOCI-Lobオブジェクトを作成するにはどうすればよいですか?

    これについて多くの調査を行った後、ようやく私はこれを理解するようになりました。 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 )

    ありがとう。




    1. MySQL:トリガーで区切り文字を使用するにはどうすればよいですか?

    2. JDBCで長時間実行されているクエリを停止または終了します

    3. 認証プロトコルが拒否されたため、MySQLODBCリンクが失敗する

    4. 5成功したDBAのデータベース監視の習慣