Генерация XML-документа в PL/SQL из таблиц Oracle

Я должен генерировать XML-документы в PL/SQL из некоторых таблиц в Oracle. Я никогда не делал этого раньше, и я обнаружил, что есть несколько основных способов сделать это:

  • API xmldom
  • Функции xml (такие как xmlelement, xmlagg, xmlroot)
  • функции dbms_xmlgen

Есть 65 таблиц, на которые будут ссылаться для генерации одного документа, и мне придется проверить вывод по xsd. Документы будут создаваться в пакете (а не по запросу) - я не знаю, если это что-то меняет. Используя Oracle 10g.

Сначала я склонялся к использованию пакета xmldom, так как он выглядел более гибким, но у меня возникают проблемы с поиском хороших примеров или документации для него, тогда как функции xml кажутся лучше документированными и в целом более популярными. Для этого есть причина?

Какой подход люди обычно рекомендуют для этого типа задач?

4 ответа

Решение

По моему опыту, DBMS_XMLGEN хорош для быстрых и грязных переводов данных в xml, но мне это никогда не нравилось, потому что вы должны передавать SQL в виде строки. Кроме того, ваш контроль над именами элементов и структурой ROWSET/ROW строго ограничен.

Функции XML очень удобны, и мой любимый, если вы имеете дело с относительно простыми структурами. Например, как только вы попадаете на несколько уровней XMLAgg, он быстро превращается в запутанный беспорядок.

XMLDOM является наиболее гибким способом генерации XML, особенно если структура более сложная или используется итеративная логика. Основным недостатком здесь является то, что это, по сути, оболочка вокруг Java DOM, где большинство методов принимают ввод DOMNode, но PL/SQL не поддерживает полиморфизм напрямую, поэтому вы в конечном итоге получаете много явных приведений между DOMElement и DOMNode и и т. д. Как правило, я создаю свой собственный пакет перегруженных процедур, чтобы инкапсулировать все это и сделать его менее трудным для работы.

Я вообще использую функции xml (XMLElement, XMLForestи т. д.) потому что у меня есть контроль над XSD. Я делаю XSD, как правило, в соответствии со структурой документов, поэтому все отлично сочетается.

Если схема, с которой вы пытаетесь работать, является исключительно сложной или причудливой, вам следует рассмотреть DBMS_XMLGEN или же DOM методы.

Ну, я никогда не использовал Oracle для генерации каких-либо очень сложных XML-документов, но использовать DBMS_XMLDOC довольно просто.

Вы можете увидеть скелет здесьздесь только код pl/sql). Также используйте Google Code Search, там наверняка найдется что-то еще.
Затем есть ссылка на DBMS_XMLDOM, которая помогает, даже если документация довольно сухая.

Убедитесь, что вы также прочитали эти два поста:
http://www.liberidu.com/blog/?p=365
http://www.liberidu.com/blog/?p=369

В качестве альтернативы вы можете посмотреть на генерацию XML с помощью хранимой процедуры Java.

Вот хорошее обсуждение некоторых доступных вам вариантов:

http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:4980337843276

Кроме того, если вы выполните поиск "Шон Диллон" в AskTom, вы получите хорошую коллекцию статей, подробно описывающих различные проблемы и решения с использованием XML в Oracle.

Другие вопросы по тегам