2012-12-09 4 views
3

Я пытаюсь запустить SQL в таблице (так называемый test_xml со столбцом xml_data [тип данных xmltype]). Столбец содержит xml с повторяющимися узлами (test_3). Следующий оператор выполняется успешно, когда узел содержит данные, не размер CLOB:Oracle SQL - Извлечение значения clob из XML с повторяющимися узлами

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 
; 

My 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 для этого

Смежные вопросы