Преобразуйте содержимое XML в таблицу - PullRequest
0 голосов
/ 01 июня 2019

У меня есть одна таблица с полем, содержащим содержимое XML, и я хотел бы преобразовать это содержимое XML в таблицу, где каждый тег был бы столбцом. Кто-нибудь знает, как это сделать?

Ответы [ 2 ]

1 голос
/ 03 июня 2019

Вам необходимо знать теги заранее, но затем вы можете использовать XMLTABLE для этого, например, если таблица table_with_employee_xml имеет столбец xml_col, как указано ниже

<employees>
  <employee>
    <empno>7369</empno>
    <ename>SMITH</ename>
    <job>CLERK</job>
    <hiredate>17-DEC-1980</hiredate>
  </employee>
  <employee>
    <empno>7499</empno>
    <ename>ALLEN</ename>
    <job>SALESMAN</job>
    <hiredate>20-FEB-1981</hiredate>
  </employee>
  ...
  ...

select x.*
from   table_with_employee_xml e,
       xmltable('/employees/employee'
         passing e.xml_col
         columns 
           empno     varchar2(4)  path 'empno',
           ename     varchar2(10) path 'ename',
           job       varchar2(9)  path 'job',
           hiredate  varchar2(11) path 'hiredate'
         ) x;
0 голосов
/ 03 июня 2019

Вы можете использовать следующий код:

CREATE TABLE EDMU_XML (
  id        NUMBER,
  xml_data  XMLTYPE
);


insert into EDMU_XML values (1,'<employees>
  <employee>
    <empno>1</empno>
    <ename>EDMU1</ename>
    <job>SALESMAN</job>\
  </employee>
  <employee>
    <empno>2</empno>
    <ename>EDMU2</ename>
    <job>MANAGER</job>
  </employee>
  <employee>
    <empno>3</empno>
    <ename>EDMU3</ename>
    <job>MANAGER</job>
  </employee>
  <employee>
    <empno>4</empno>
    <ename>EDMU4</ename>
    <job>ANALYST</job>
  </employee>
</employees>');


CREATE TABLE EDMU_NORMAL AS
SELECT xt.*
FROM   EDMU_XML x,
       XMLTABLE('/employees/employee'
         PASSING x.xml_data
         COLUMNS 
           empno     VARCHAR2(4)  PATH 'empno',
           ename     VARCHAR2(10) PATH 'ename',
           job       VARCHAR2(9)  PATH 'job'
         ) xt;

Демо

...