Reputation: 495
I want to create Import query which should be taking data from XML file and want to define columns dynamically .
Like same Import XMLtable query can be used for Multi table data imports.
Table1: having 2 columns entity_name trade_date
Table 2 : having 3 columns completely different from table 1
cust_details cust_phone cust_address
For Table 1 XML import query -----
select xt.* from xml_tab x, XMLTABLE('rowset/row' passing x.xml_date columns "ENTITY_NAME" varchar2(10) PATH 'entity_name', "TRADE_DATE" varchar2(10) PATH 'trade_date' ) xt
Want to make XMLTABLE query which will generic for multiple tables ?
Upvotes: 0
Views: 498
Reputation: 6366
1) If you want to import data you can user dbms_store or dbms_save.
create table test123 as select * from dict where 1 =2;
create table test567 as select * from user_tab_privs where 1 =2;
dbms_xmlgen.getXml
- it is creating xml from curosr;
declare
v_ctx dbms_xmlsave.ctxType;
v_rows number;
BEGIN
v_ctx := dbms_xmlsave.newContext('TEST123');
v_rows := dbms_xmlsave.insertxml(v_ctx,dbms_xmlgen.getXml('select * from dict where rownum<10'));
dbms_xmlsave.closeContext(v_ctx);
dbms_output.put_line(v_rows || ' rows inserted...');
v_ctx := dbms_xmlsave.newContext('TEST567');
v_rows := dbms_xmlsave.insertxml(v_ctx,dbms_xmlgen.getXml('select * from user_tab_privs where rownum<10'));
dbms_xmlsave.closeContext(v_ctx);
dbms_output.put_line(v_rows || ' rows inserted...');
commit;
END;
/
2) You can use positional access of xml elements in xmltable. it is useful in some cases but it is not the best solutions
select *
from xmltable('ROWSET/ROW'
passing xmltype(dbms_xmlgen.getXml('select * from dict where rownum<10'))
columns col1 varchar2(4000) path '*[1]'
, col2 varchar2(4000) path '*[2]'
, col3 varchar2(4000) path '*[3]'
, col4 varchar2(4000) path '*[4]'
, col5 varchar2(4000) path '*[5]'
---... and more
);
select *
from xmltable('ROWSET/ROW'
passing xmltype(dbms_xmlgen.getXml('select * from user_objects where rownum<10'))
columns col1 varchar2(4000) path '*[1]'
, col2 varchar2(4000) path '*[2]'
, col3 varchar2(4000) path '*[3]'
, col4 varchar2(4000) path '*[4]'
, col5 varchar2(4000) path '*[5]'
--... and more
Upvotes: 1