5

テーブルで SQL を実行しようとしています (test_xmlxml_data[データ型 xmltype] で呼び出されます)。列には、繰り返しノード ( test_3) を持つ xml が含まれています。次のステートメントは、ノードに CLOB 以外のサイズのデータ​​が含まれている場合に正常に実行されます。

SELECT 
   extractvalue (Value (wl), '*/test_3')
      FROM test_xml
         , TABLE (xmlsequence (extract (xml_data, '*/record'))) wl

しかし、test_3 ノードに大量のデータが含まれていると失敗します。

ORA-01706: ユーザー関数の結果値が大きすぎました

クエリを修正しました:

SELECT 
   extractvalue(Value (wl), '*/test_3').getClobVal()
      FROM test_xml
         , TABLE (xmlsequence (extract (xml_data, '*/record'))) wl

しかし、これは失敗します:

ORA-22806: オブジェクトまたはREFではありません

4

1 に答える 1

9

これは、Oracle Forums で受け取った応答によって解決されました。

フォーラムの投稿を見る

Oracle リリース 11.2.0.2 から:

SELECT x.*
FROM test_xml t
   , XMLTable(
       '/*/record'
       passing t.xml_data
       columns
         test_3  clob path 'test_3'
     ) x
;

私のデータベースのバージョンは 10.2.0.4 であるため、次の「トリック」が必要です。

SELECT dbms_xmlgen.convert(x.test_3.getClobVal(), 1) as test_3
FROM test_xml t
   , XMLTable(
       '/*/record'
       passing t.xml_data
       columns
         test_3  xmltype path 'test_3/text()'
     ) x
;

これについて odie_63 に感謝します

于 2012-12-09T18:56:50.013 に答える