Как отобразить несколько узлов для xmltype в oracle - PullRequest
0 голосов
/ 22 января 2020

У меня есть столбец b_ xml в таблице T_ XML,

T_XML
a_var      b_xml

A1         <amt1>1</amt1><amt2>1.11</amt2><bmt>1.111</bmt>.....
A2         <amt1>2</amt1><amt2>2.22</amt2><bmt>2.222</bmt>....
...
AN         <amt1>n</amt1><amt2>x</amt2><bmt>y</bmt>....

Я хочу преобразовать запись xml в csv.

Можно ли использовать какой-либо запрос или функцию для отображения b_ xml, как показано ниже?

amt1,amt2,bmt...


1,1.11,1.111...
2,2.22,2.222...
....
n,x,y,...

1 Ответ

0 голосов
/ 22 января 2020

Используйте функцию XMLTABLE, чтобы отобразить результат столбца XMLType в реляционные строки и столбцы, а затем объединить результаты:

SELECT amt1||','||amt2||','||bmt as "Concatenated String"
  FROM XML_TAB x
 CROSS JOIN
       XMLTABLE(XMLnamespaces('http://www.example.com' as "ns"),
                'ns:Root'
                PASSING x.xml_data
                COLUMNS
                    amt1 VARCHAR2(255) PATH 'ns:amt1',
                    amt2 VARCHAR2(255) PATH 'ns:amt2',
                    bmt  VARCHAR2(255) PATH 'ns:bmt'
                    ) t;        

Демонстрация 1

или для случая рендеринга XMLType данных без опции namespace:

SELECT amt1||','||amt2||','||bmt as "Concatenated String"
  FROM XML_TAB x
 CROSS JOIN
       XMLTABLE('/Root'
                PASSING x.xml_data
                COLUMNS
                    amt1 VARCHAR2(255) PATH '/Root/amt1',
                    amt2 VARCHAR2(255) PATH '/Root/amt2',
                    bmt  VARCHAR2(255) PATH '/Root/bmt'
                    ) t;     

Демонстрация 2

...