我正在将数据库从Oracle 10.1迁移到11.2,我遇到了以下问题。
声明
SELECT
'<?xml version="1.0" encoding="utf-8" ?>' || (Xml).getClobVal() AS XmlClob
FROM
(
SELECT
XmlElement( "Element1",
(
SELECT
XmlAgg(tpx.Xml)
FROM
(
SELECT
XmlElement("Element3",XmlForest('content' as Element4)) AS Xml
FROM dual
) tpx
) AS "Element2"
) AS Xml
FROM
dual
)
在原来的10.1数据库上生成这样的XML…
<?xml version="1.0" encoding="utf-8"?>
<Element1>
<Element2>
<Element3>
<ELEMENT4>content</ELEMENT4>
</Element3>
</Element2>
</Element1>
在新的11.2系统上看起来是这样…
<?xml version="1.0" encoding="utf-8"?>
<Element1>
<Element3>
<ELEMENT4>content</ELEMENT4>
</Element3>
</Element1>
我是否遗漏了一些环境变量来告诉Oracle如何格式化它的XML。数据库中有成百上千行的pl/sql;如果事实证明它们改变了oracle在不同版本之间格式化xml的方式,那么重写它将是一项艰巨的任务。
希望以前有人来过。
谢谢
最佳答案
在我看来,v10中可能存在一个bug,因为您没有显式地告诉dbms element2是一个xml元素。xmlagg返回一个nodeset,仅仅因为您给它一个别名“element2”,似乎并不表示它应该嵌套在该名称的元素中。