我正在尝试在表上运行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
答案 0 :(得分:8)
通过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这个