2016-06-03 17 views
1

Ich habe XML_CLOBOracle - Abfrage CLOB- Wert unter multple Tags mit demselben Namen eine Tabelle abzurufen T mit <code>CLOB</code> Spalt

Wert in der Spalte mit dem Namen gerne folgenden:

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

Ich versuche abrufen Zeichenfolgewert aus dieser CLOB-Spalte und Rückgabe in verschiedenen Zeilen. Wenn ich

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

verwende, gibt es wie 'REPORT_AREPORT_BREPORT_C' in derselben Zeile aus.

Ich habe auch versucht extractValue(xmltype(xml_clob), '//reportName/string[1]') aber das Problem ist, ich weiß nicht, wie viel Kind Werte unter Tag

Gibt es trotzdem ich in verschiedenen Reihen wie abrufen können: 1 REPORT_A 2 REPORT_B 3 REPORT_C

Vielen Dank im Voraus ~

Antwort

0

Oracle-Setup:

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>' 
); 

Abfrage 1:

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

Abfrage 2:

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

Output:

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