Есть два хороших способа генерации XML, которые я нашел. Одним из них является пакет SYS.XMLDOM, который по сути является оберткой вокруг API Java DOM. Это несколько неуклюже, потому что pl / sql не обладает полиморфными возможностями Java, поэтому вам постоянно приходится явно «приводить» элементы к узлам и наоборот, чтобы использовать методы в пакете.
Самая классная, IMO, техника - использовать XMLElement и т. Д. SQL-функции, подобные этой:
SET SERVEROUTPUT ON SIZE 1000000;
DECLARE
v_xml XMLTYPE;
BEGIN
SELECT
XMLElement( "dual",
XMLAttributes( dual.dummy AS "dummy" )
)
INTO
v_xml
FROM
dual;
dbms_output.put_line( v_xml.getStringVal() );
END;
/
Если ваша структура XML не очень сложна и легко сопоставляется со структурой таблицы, это может быть очень удобно.