2016-06-03 5 views
1

У меня есть таблица T с CLOB колонке под названием XML_CLOBOracle - запрос для получения значения CLOB под multple тегов с таким же именем

Значение в колонке любит следующее:

<reportName> 
<string>REPORT_A</string> 
<string>REPORT_B</string> 
<string>REPORT_C</string> 
</reportName> 

Я пытаюсь получить string из этого столбца CLOB и возврата в разные строки. Если я использую

xmltype(xml_clob).extract('//reportName/string/text()').getstringval() 

он выводит как «REPORT_AREPORT_BREPORT_C» в той же строке.

Я также попытался extractValue(xmltype(xml_clob), '//reportName/string[1]') , но проблема в том, я не знаю, как много значений ребенка под тегом

Есть в любом случае я могу получить в разных строках, как: 1 REPORT_A 2 REPORT_B 3 REPORT_C

Большое спасибо заранее Установка ~

ответ

0

Oracle:

CREATE TABLE table_name (xml_clob CLOB); 

INSERT INTO table_name VALUES ( 
'<reportName> 
<string>REPORT_A</string> 
<string>REPORT_B</string> 
<string>REPORT_C</string> 
</reportName>' 
); 

Запрос 1:

SELECT x.string 
FROM table_name t, 
     XMLTable('/reportName/string' 
      PASSING XMLType(t.xml_clob) 
      COLUMNS string VARCHAR2(50) PATH '/' 
     ) x 

Запрос 2:

SELECT EXTRACTVALUE(s.COLUMN_VALUE, '/string') AS string 
FROM table_name t, 
     TABLE(
     XMLSequence(
      EXTRACT(
      XMLType(t.xml_clob), 
      '/reportName/string' 
      ) 
     ) 
     ) s; 

Выход:

STRING 
-------- 
REPORT_A 
REPORT_B 
REPORT_C 
0
WITH test_table AS 
    (SELECT xmltype('<reportName> 
<string>REPORT_A</string> 
<string>REPORT_B</string> 
<string>REPORT_C</string> 
</reportName>') xml_clob 
    FROM dual 
) 
SELECT x.* 
FROM test_table, 
    xmltable('/reportName/string' 
    passing test_table.xml_clob 
    columns report_name VARCHAR2(100) path 'text()') x