2012-12-09 92 views
3

我正在尝试在表(称为test_xml,列xml_data [数据类型xmltype])上运行SQL。该列包含带重复节点的xml(test_3)。下面的语句成功运行,当节点包含非CLOB大小的数据:Oracle SQL - 使用重复节点从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

回答

7

经由上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 
; 

我的da tabase版本是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此