我使用dbms_xmlgen.getxmltype生成了一个包含表中所有行的xml:
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中的值重新插入到同一张表中?
答案 0 :(得分:2)
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;
/
答案 1 :(得分:1)
是否可以将上述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
;