5

我正在尝试在表上运行 SQL(test_xml使用列xml_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 论坛上收到的回复得到解决:

见论坛帖子

从 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 回答