Writing tables to xml
I was
searching information about writing tables to a XML file. The process consists
of 2 step
-
Creating the XML file
- Writing the XML to disk
The last step is easy (see http://technology.amis.nl/blog/?p=2853 Of my colleague Marco).
This post
concentrates on the first step. 
I decided
to create a XML file based on the standard DEPT and EMP tables. The following
code did the trick:
PROCEDURE writexml<br /> IS <br /> CURSOR xmlcur IS <br /> SELECT xmlelement("DEPARTMENTS", <br /> xmlagg( <br /> xmlelement("DEPARTMENT", xmlattributes(d.loc as "LOC"),<br /> xmlconcat(<br /> xmlforest(d.dname as "NAME", d.deptno as "DEPTNO")<br /> ,xmlelement("EMPLOYEES"<br /> ,xmlagg(xmlelement("EMPLOYEE", xmlforest(e.empno as "EMPNO", e.ename as "NAME", e.job as "JOB", e.hiredate as "HIREDATE", e.sal as "SAL"))<br /> ) <br /> ) <br /> ) <br /> )<br /> ) <br /> ) <br /> FROM emp e <br /> , dept d <br /> WHERE e.DEPTNO=d.DEPTNO <br /> GROUP BY d.deptno, d.dname, d.loc ;<br /> <br /> l_emp xmltype; <br /> BEGIN<br /> open xmlcur;<br /> fetch xmlcur into l_emp;<br /> close xmlcur;<br /> dbms_xslprocessor.clob2file( l_emp.getclobval( ) , 'TEMP', 'test.xml' );<br /> END;<br />
- The
XMLelement is used to create an XML element based on the column value. - With the XMLAgg it is possible to generate collections of xml elements.
- XMLForest is used to generate several xml elements successively. It is the same
if you are using several XMLelements. - With XMLConcat you can combine XMLType values.
The xml output
is the following:
<DEPARTMENTS><br /> <DEPARTMENT LOC="NEW YORK"><br /> <NAME>ACCOUNTING</NAME><br /> <DEPTNO>10</DEPTNO><br /> <EMPLOYEES><br /> <EMPLOYEE><br /> <EMPNO>7782</EMPNO><br /> <NAME>CLARK</NAME><br /> <JOB>MANAGER</JOB><br /> <HIREDATE>1981-06-09</HIREDATE><br /> <SAL>2450</SAL><br /> </EMPLOYEE><br /> <EMPLOYEE><br /> <EMPNO>7839</EMPNO><br /> <NAME>KING</NAME><br /> <JOB>PRESIDENT</JOB><br /> <HIREDATE>1981-11-17</HIREDATE><br /> <SAL>5000</SAL><br /> </EMPLOYEE><br /> </EMPLOYEES><br /> </DEPARTMENT><br /> <DEPARTMENT LOC="DALLAS"><br /> <NAME>RESEARCH</NAME><br /> <DEPTNO>20</DEPTNO><br /> <EMPLOYEES><br /> <EMPLOYEE><br /> <EMPNO>7369</EMPNO><br /> <NAME>SMITH</NAME><br /> <JOB>CLERK</JOB><br /> <HIREDATE>1980-12-17</HIREDATE><br /> <SAL>800</SAL><br /> </EMPLOYEE><br /> <EMPLOYEE><br /> <EMPNO>7902</EMPNO><br /> <NAME>FORD</NAME><br /> <JOB>ANALYST</JOB><br /> <HIREDATE>1981-12-03</HIREDATE><br /> <SAL>3000</SAL><br /> </EMPLOYEE><br /> <EMPLOYEE><br /> <EMPNO>7876</EMPNO><br /> <NAME>ADAMS</NAME><br /> <JOB>CLERK</JOB><br /> <HIREDATE>1983-01-12</HIREDATE><br /> <SAL>1100</SAL><br /> </EMPLOYEE><br /> </EMPLOYEES><br /> </DEPARTMENT><br />...<br /></DEPARTMENTS><br />
I wish I read this yesterday. It would save me some time today
I’ve archived the same with more code and UTL_FILE.