Oracle 10.1 и 11.2 производят разные XML, используя один и тот же оператор - PullRequest
5 голосов
/ 04 марта 2010

Я перемещаю базу данных из 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 ]

1 голос
/ 08 апреля 2010

Выглядит для меня как возможная ошибка в v10, поскольку вы явно не говорите СУБД, что Element2 является элементом XMLElement. XMLAgg возвращает Nodeset, и то, что вы дали ему псевдоним «Element2», не означает, что он должен быть вложен в элемент с таким именем.

0 голосов
/ 04 марта 2010

У меня нет доступа к поиску Metalink, но вы можете посмотреть, есть ли какие-либо сообщения об этой функциональной разнице, если у вас есть аккаунт.

Я могу воспроизвести эту проблему на 10.2.0.1 против 11g, используя ваш пример запроса.Я не увидел никакой информации в заметках о выпуске для 11g, описывающих какие-либо изменения поведения по умолчанию, подобные этому.Вы также можете открыть дело в службу поддержки Oracle, если у вас есть контракт на поддержку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...