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