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