Oracle SQL – 使用重复节点从XML中提取clob值

前端之家收集整理的这篇文章主要介绍了Oracle SQL – 使用重复节点从XML中提取clob值前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图在一个表上运行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论坛收到的回复解决了这个问题:

See Forum Post

从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吧

猜你在找的Oracle相关文章