我正在将数据库从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”,似乎并不表示它应该嵌套在该名称的元素中。

09-12 12:49