Generating XML in PL/SQL
At work we have historically been using concatenation for generating XML Data. I stumbled upon these XML functions the other day, and thought it was worth sharing. They seem to be the proper, and I’m sure more efficient, way to generate XML using Oracle PL/SQL. I’m dumbfounded that our developers didn’t use this method, but who am I to judge!
Oracle Documentation:
http://docs.oracle.com/cd/E11882_01/appdev.112/e23094/xdb13gen.htm#ADXDB1600
Easier to Understand Guide:
http://allthingsoracle.com/generating-xml-from-sql-and-pl-sql-part-1/
http://allthingsoracle.com/generating-xml-from-sql-and-plsql-part-2/
Example Query for Delivery Lines
Should produce XML for a Delivery with its lines, where lines contain the Item Number, Description, Shipped Quantity, and Requested Quantity.
SELECT XMLSERIALIZE ( DOCUMENT (SELECT XMLELEMENT ( "EXTRACT", (SELECT XMLAGG ( XMLELEMENT ( "DELIVERY", XMLELEMENT ("DELIVERY_ID", DELIVERY_ID), XMLELEMENT ( "LIST_LINE", (SELECT XMLAGG ( XMLELEMENT ( "LINE", XMLFOREST ( msib.segment1 AS "ITEM_NUMBER", XMLCDATA ( MSIBTL.DESCRIPTION) AS DESCRIPTION, NVL ( WDD.SHIPPED_QUANTITY, 0) AS "SHIPPED_QUANTITY", WDD.REQUESTED_QUANTITY AS "REQUESTED_QUANTITY", wdd.delivery_detail_id))) FROM wsh_delivery_assignments wda, wsh_delivery_details wdd, mtl_system_items_b msib, mtl_system_items_TL msibTL WHERE wda.delivery_id = wnd.delivery_id AND wda.delivery_detail_id = wdd.delivery_detail_id AND wdd.inventory_item_id = msib.inventory_item_id AND msib.organization_id = WND.ORGANIZATION_ID AND wdd.inventory_item_id = msibTL.inventory_item_id AND msibTL.organization_id = WND.ORGANIZATION_ID AND MSIBTL.LANGUAGE = 'US')))) AS XML FROM wsh_new_deliveries wnd WHERE delivery_id = :delivery_id)) FROM DUAL) AS CLOB VERSION 1.1 INDENT) AS xmlserialize_doc FROM DUAL;
Comments (0)
Trackbacks (0)
Leave a comment
Trackback