我正在使用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上运行,由旧的oracle开发人员工具forms6i构建。
答案 0 :(得分:3)
您使用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()
等价物。
编辑: 假脱机:
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