Procedure to load XML / Excel data into table
create or replace procedure proc_parseXml(pRawXMLdata clob) is
v_parser Dbms_Xmlparser.Parser;
v_Xml_Clob Clob;
v_Doc Dbms_Xmldom.Domdocument;
v_Child_Node dbms_xmldom.domnodelist;
v_xml_Node Dbms_Xmldom.Domnode;
v_empno number;
v_ename varchar2(20);
v_job varchar2(20);
v_hiredate varchar2(20);
Begin
-- CLOB data
v_Xml_Clob :=pRawXMLdata ;
-- Create XML Parser.
v_parser := Dbms_Xmlparser.Newparser;
-- Parse XML into DOM object
Dbms_Xmlparser.Parseclob(v_parser , v_Xml_Clob);
-- XML Document
v_Doc := Dbms_Xmlparser.Getdocument(v_parser );
-- Root element
v_Child_Node:=dbms_xslprocessor.selectNodes(dbms_xmldom.makeNode(v_doc),'/employees/employee');
--
For I in 0..dbms_xmldom.getlength(v_Child_Node)-1 LOOP
v_xml_Node := dbms_xmldom.item(v_Child_Node,I);
DBMS_XSLPROCESSOR.valueof(v_xml_Node,'empno/text()',v_empno);
DBMS_XSLPROCESSOR.valueof(v_xml_Node,'ename/text()',v_ename);
DBMS_XSLPROCESSOR.valueof(v_xml_Node,'job/text()',v_job);
DBMS_XSLPROCESSOR.valueof(v_xml_Node,'hiredate/text()',v_hiredate);
insert into emp(empno, ename, job, hiredate) values(v_empno,v_ename,v_job,v_hiredate);
End LOOP;
End;
/
--Call procedure proc_parseXml
declare
v_rawXMLData clob;
begin
v_rawXMLData := '<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></employees>';
proc_parseXml(v_rawXMLData );
end;
/
v_parser Dbms_Xmlparser.Parser;
v_Xml_Clob Clob;
v_Doc Dbms_Xmldom.Domdocument;
v_Child_Node dbms_xmldom.domnodelist;
v_xml_Node Dbms_Xmldom.Domnode;
v_empno number;
v_ename varchar2(20);
v_job varchar2(20);
v_hiredate varchar2(20);
Begin
-- CLOB data
v_Xml_Clob :=pRawXMLdata ;
-- Create XML Parser.
v_parser := Dbms_Xmlparser.Newparser;
-- Parse XML into DOM object
Dbms_Xmlparser.Parseclob(v_parser , v_Xml_Clob);
-- XML Document
v_Doc := Dbms_Xmlparser.Getdocument(v_parser );
-- Root element
v_Child_Node:=dbms_xslprocessor.selectNodes(dbms_xmldom.makeNode(v_doc),'/employees/employee');
--
For I in 0..dbms_xmldom.getlength(v_Child_Node)-1 LOOP
v_xml_Node := dbms_xmldom.item(v_Child_Node,I);
DBMS_XSLPROCESSOR.valueof(v_xml_Node,'empno/text()',v_empno);
DBMS_XSLPROCESSOR.valueof(v_xml_Node,'ename/text()',v_ename);
DBMS_XSLPROCESSOR.valueof(v_xml_Node,'job/text()',v_job);
DBMS_XSLPROCESSOR.valueof(v_xml_Node,'hiredate/text()',v_hiredate);
insert into emp(empno, ename, job, hiredate) values(v_empno,v_ename,v_job,v_hiredate);
End LOOP;
End;
/
--Call procedure proc_parseXml
declare
v_rawXMLData clob;
begin
v_rawXMLData := '<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></employees>';
proc_parseXml(v_rawXMLData );
end;
/
Comments
Post a Comment