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

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

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

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

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

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

Ответы [ 4 ]

5 голосов
/ 30 ноября 2009

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

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

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

2 голосов
/ 01 декабря 2009

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

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

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

2 голосов
/ 30 ноября 2009

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

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

2 голосов
/ 30 ноября 2009

Ну, я никогда не использовал 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.

...