2012-12-09 44 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此

相關問題