我试图在一个表上运行sql(名为test_xml,列为xml_data [数据类型xmltype]).该列包含具有重复节点的xml(test_3).当节点包含非clob大小的数据时,以下语句成功运行:
SELECT extractvalue (Value (wl),'*/test_3') FROM test_xml,TABLE (xmlsequence (extract (xml_data,'*/record'))) wl
但是当test_3节点包含大量数据时失败:
ORA-01706: user function result value was too large
SELECT extractvalue(Value (wl),'*/test_3').getClobVal() FROM test_xml,'*/record'))) wl
但这失败了:
ORA-22806: not an object or REF
解决方法
通过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吧