PLSQL: вставлять значения XML в таблицу без указания столбцов - PullRequest
1 голос
/ 01 июля 2019

Я сгенерировал xml, содержащий все строки моей таблицы, используя dbms_xmlgen.getxmltype:

select dbms_xmlgen.getxmltype('select * from MyTable') from dual;

Итак, у меня есть xml, подобный этому:

    <ROWSET>
    <ROW>
     <ID>1</ID>
     <SURNAME>Smith</SURNAME>
      <NAME>John</NAME>
      <ADDRESS>XXX</ADDRESS>
    </ROW>
    <ROW>
     <ID>2</ID>
     <SURNAME>Allen</SURNAME>
     <NAME>Jim</NAME>
     <ADDRESS>YYY</ADDRESS>
     </ROW>
   </ROWSET>

Возможно ли повторно-инсталлировать значения из XML выше в одну и ту же таблицу динамически, без указания имени столбца?

Ответы [ 2 ]

2 голосов
/ 01 июля 2019

dbms_xmlsave может сделать это для вас. В самой основной форме

declare
   myxml clob;
   rowsv number;
   ctx dbms_xmlsave.ctxType;
begin null;
   my_xml := --  XML data
   ctx := dbms_xmlsave.newcontext('myTable');
   rows := dbms_xmlsave.insertxml(ctx,myxml);
   dbms_xmlsave.closecontext(ctx);
end;
/

Документация Oracle

1 голос
/ 02 июля 2019

Возможно ли заново вставить значения из XML выше в ту же таблицу динамически, без указания имени какого-либо столбца?

Вы можете сделать, как показано ниже в демонстрационной версии:

--Table having xml
CREATE TABLE xml_tab (  xml_data  XMLTYPE);

--Inserting xml                       
INSERT INTO xml_tab VALUES ( '<ROWSET>
                            <ROW>
                             <ID>1</ID>
                             <SURNAME>Smith</SURNAME>
                              <NAME>John</NAME>
                              <ADDRESS>XXX</ADDRESS>
                            </ROW>
                            <ROW>
                             <ID>2</ID>
                             <SURNAME>Allen</SURNAME>
                             <NAME>Jim</NAME>
                             <ADDRESS>YYY</ADDRESS>
                             </ROW>
                           </ROWSET>'
);
--Selecting xml
SELECT * FROM xml_tab;                        

--Table to insert records
CREATE TABLE xmtab (
    id        NUMBER,
    surname   VARCHAR2(50),
    name      VARCHAR2(50),
    address   VARCHAR2(50)
);

--Inserting into XMTAB
INSERT INTO XMTAB
SELECT xt.*
FROM xml_tab x,
    XMLTABLE('/ROWSET/ROW'
     PASSING x.xml_data
     COLUMNS
      ID          NUMBER       PATH 'ID',
      SURNAME     VARCHAR2(50) PATH 'SURNAME',
      NAME        VARCHAR2(50) PATH 'NAME',
      ADDRESS     VARCHAR2(50) PATH 'ADDRESS'
          ) xt
;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...