我正在使用oracle数据库9ir2,我需要将某些表转换为具有自定义格式标签的xml文件。
例如:我想从emp表的某些列中生成XML,然后生成一个名为“ myxmlfile.xml”的文件,如下所示:
<?xml version="1.0" encoding="UTF-8"?> <entity-engine-xml> <myxmlfile EMPNO="8401" ENAME="JHON" HIREDATE="1988-12-30" SAL="5000" DEPTNO="10" /> <myxmlfile ... /> <myxmlfile ... /> </entity-engine-xml>
注意:该用户应用程序在XP PC上运行,该PC是由旧的oracle开发人员工具Forms6i构建的。
您可以使用XMLELEMENT等执行此操作
select xmlelement("entity-engine-xml", xmlagg( xmlelement( "myxmlfile", xmlattributes(empno as "EMPNO", ename as "ENAME", to_char(hiredate, 'yyyy-mm-dd') as "HIREDATE", sal as "SAL", deptno as "DEPTNO" ) ) ) ).getclobval() from emp;
。
how to convert xmltype to varchar2 ???
为此有一个getStringVal函数。即在上面的例子中我用过getClobval。有一个getstringval()等效的。
getClobval
getstringval()
编辑:假脱机:
set trims on feedback off heading off long 50000 linesize 32767 pagesize 0 col c format a32767 spool c:\temp\foo.xml select xmlelement("entity-engine-xml", xmlagg( xmlelement( "myxmlfile", xmlattributes(empno as "EMPNO", ename as "ENAME", to_char(hiredate, 'yyyy-mm-dd') as "HIREDATE", sal as "SAL", deptno as "DEPTNO" ) ) ) ).transform(xmltype('<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output omit-xml-declaration="yes" indent="yes"/> <xsl:template match="node()|@*"> <xsl:copy> <xsl:apply-templates select="node()|@*"/> </xsl:copy> </xsl:template> </xsl:stylesheet>')) c from emp; spool off