0

クエリの実行時に「ORA-21560:引数3がnull、無効、または範囲外です」というエラーが発生します。

SELECT extractvalue(xmltype(blob2clob(shblobdata.blobdata)),
    '/booked-order/ads/online-content[name="quantity"]/value')
FROM shblobdata
WHERE id=...;

完全なエラーは次のとおりです。

ORA-21560: argument 3 is null, invalid, or out of range
ORA-06512: at "SYS.DBMS_LOB", line 978
ORA-06512: at "MORAS.BLOB2CLOB", line 14

21560。00000-「引数%sがnull、無効、または範囲外です」

*原因:引数はnull以外の有効な値を予期していますが、渡された引数の値はnull、無効、または範囲外です。例としては、LOB / FILEの位置引数またはサイズ引数の値が1〜(4GB -1)の範囲外である場合や、ファイルを開くために無効なオープンモードが使用されている場合などがあります。

*アクション:プログラムをチェックし、ルーチンの呼び出し元を修正して、ヌル、無効、または範囲外の引数値を渡さないようにしてください。

「数量」を「数量」に変更しようとしましたが(一重引用符を2つのアポストロフィに変更)、同じエラーが発生しました。

BLOBの内容は次のとおりです。

<?xml version="1.0" encoding="utf-8"?>
<booked-order>
    <ads>
        <online-content>
            <name>quantity</name>
            <value>19872</value>
        </online-content>
    </ads>
</booked-order>
4

2 に答える 2

3

The problem is in your custom function MORAS.BLOB2CLOB.

Also the error message says clearly ORA-06512: at "MORAS.BLOB2CLOB", line 14

The extract itself is ok, when you keep out BLOB2CLOB and test with

SELECT EXTRACTVALUE (xmltype ( (shblobdata.blobdata)), '/booked-order/ads/online-content[name="quantity"]/value')
  FROM (SELECT '<?xml version="1.0" encoding="utf-8"?>
<booked-order>
    <ads>
        <online-content>
            <name>quantity</name>
            <value>19872</value>
        </online-content>
    </ads>
</booked-order>
' blobdata
          FROM DUAL) shblobdata
;

it returns 19872

I'd first debug your function blob2clob with

SELECT blob2clob(shblobdata.blobdata)
  FROM shblobdata
 WHERE id=...;

And if that works ok continue on to the XML parts.

于 2012-07-20T12:15:41.843 に答える
2

BLOB2CLOB()例外は、Oracle 組み込みではないによって明らかにスローされます。それはあなたが自分で書いたものか、インターウェブのどこかから拾ってきたものです。したがって、それに関して私たちができることはあまりありません。

より一般的なポイントは、なぜ XML を BLOB に格納するのかということです。最適なアプローチは、Oracle の XMLTYPE データ型として定義された列に格納することです。それ以外の場合は、CLOB として格納します。

于 2012-07-20T12:08:21.193 に答える