Oracle 10.1和11.2使用相同的语句生成不同的XML

时间:2010-03-04 02:08:28

标签: xml oracle

我正在将数据库从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的方式,那将是一个巨大的重写任务。

希望以前有人来过这个。 谢谢

2 个答案:

答案 0 :(得分:1)

我认为v10中可能存在错误,因为您没有明确告诉DBMS Element2是XMLElement。 XMLAgg返回一个Nodeset,只是因为你给它一个别名“Element2”似乎没有表明它应该嵌套在该名称的元素中。

答案 1 :(得分:0)

我无权访问Metalink,但如果您有帐户,可能需要查看是否有关于此功能差异的帖子。

我可以使用您的示例查询在10.2.0.1 vs 11g上重现此问题。我没有在11g的发行说明中看到任何描述任何类型的默认行为更改的信息。如果您有支持合同,也可以使用Oracle Support打开案例。