SET DEFINE OFF;
SET SERVEROUTPUT ON;
DECLARE
v_mds_xml_parser DBMS_XMLPARSER.parser;
v_mds_xml_doc DBMS_XMLDOM.domdocument;
v_Release_node xmldom.domnode;
node_not_exists EXCEPTION;
v_ShipToLocationRef_list xmldom.domnodelist;
v_ShipToLocationRef_node xmldom.domnode;
v_LocationRef_list xmldom.domnodelist;
v_LocationRef_node xmldom.domnode;
v_Location_list xmldom.domnodelist;
v_Location_node xmldom.domnode;
v_TransactionCode VARCHAR2 (1000) := NULL;
v_LocationGid_list xmldom.domnodelist;
v_LocationGid_node xmldom.domnode;
v_Gid_list xmldom.domnodelist;
v_Gid_node xmldom.domnode;
v_DomainName VARCHAR2 (1000) := NULL;
v_Xid VARCHAR2 (1000) := NULL;
v_LocationName VARCHAR2 (1000) := NULL;
v_Address_list xmldom.domnodelist;
v_Address_node xmldom.domnode;
v_AddressLine1 VARCHAR2 (100) := NULL;
v_AddressLine2 VARCHAR2 (100) := NULL;
v_City VARCHAR2 (100) := NULL;
v_Province VARCHAR2 (100) := NULL;
v_PostalCode VARCHAR2 (100) := NULL;
v_CountryCode_list xmldom.domnodelist;
v_CountryCode_node xmldom.domnode;
v_CountryCode VARCHAR2 (100) := NULL;
reqxml CLOB
:= '<sample:Release xmlns:sample="http://xmlns.oracle.com/apps/sample/transmission/v6.4" xmlns:gtm="http://xmlns.oracle.com/apps/gtm/transmission/v6.4">
<sample:ReleaseGid>
<sample:Gid>
<sample:DomainName>ABC</sample:DomainName>
<sample:Xid>1234</sample:Xid>
</sample:Gid>
</sample:ReleaseGid>
<sample:TransactionCode>CR</sample:TransactionCode>
<sample:ShipToLocationRef>
<sample:LocationRef>
<sample:Location>
<sample:TransactionCode>KK</sample:TransactionCode>
<sample:LocationGid>
<sample:Gid>
<sample:DomainName>ABC</sample:DomainName>
<sample:Xid>87901111</sample:Xid>
</sample:Gid>
</sample:LocationGid>
<sample:LocationName>MADIWALA</sample:LocationName>
<sample:Address>
<sample:AddressLine1>41, BTM LAYOUT</sample:AddressLine1>
<sample:AddressLine2/>
<sample:City>BANGALORE</sample:City>
<sample:Province/>
<sample:PostalCode>560076</sample:PostalCode>
<sample:CountryCode>
<sample:CountryCode2>KR</sample:CountryCode2>
</sample:CountryCode>
</sample:Address>
<sample:Contact>
<sample:ContactGid>
<sample:Gid>
<sample:DomainName>ABC</sample:DomainName>
<sample:Xid>87901111</sample:Xid>
</sample:Gid>
</sample:ContactGid>
<sample:IsPrimaryContact>Y</sample:IsPrimaryContact>
</sample:Contact>
<sample:LocationRole>
<sample:LocationRoleGid>
<sample:Gid>
<sample:DomainName>PUBLIC</sample:DomainName>
<sample:Xid>SHIPFROM/SHIPTO</sample:Xid>
</sample:Gid>
</sample:LocationRoleGid>
</sample:LocationRole>
</sample:Location>
</sample:LocationRef>
</sample:ShipToLocationRef>
</sample:Release>';
FUNCTION f_verify_and_gettag_value (i_elem xmldom.domelement,
i_tagname VARCHAR2)
RETURN VARCHAR2
IS
pnodelist xmldom.domnodelist;
pnode xmldom.domnode;
pelement xmldom.domelement;
e_xmltag_notexists EXCEPTION;
BEGIN
pnodelist := xmldom.getchildrenbytagname (i_elem, i_tagname);
pnode := xmldom.item (pnodelist, 0);
IF (xmldom.isnull (pnode))
THEN
RAISE e_xmltag_notexists;
END IF;
IF xmldom.haschildnodes (pnode)
THEN
IF (xmldom.getnodetype (pnode) = xmldom.element_node)
THEN
pnode := xmldom.getfirstchild (pnode);
RETURN (xmldom.getnodevalue (pnode));
END IF;
END IF;
RETURN NULL;
EXCEPTION
WHEN e_xmltag_notexists
THEN
RETURN NULL;
END f_verify_and_gettag_value;
PROCEDURE p_get_node_value (io_outval IN OUT VARCHAR2,
i_tagnode xmldom.domnode,
i_tagname VARCHAR2)
IS
tagval VARCHAR2 (30000);
e_xmltag_notexists EXCEPTION;
BEGIN
BEGIN
tagval :=
f_verify_and_gettag_value (xmldom.makeelement (i_tagnode),
i_tagname);
io_outval := tagval;
EXCEPTION
WHEN e_xmltag_notexists
THEN
io_outval := NULL;
-- mr8328 on 12/01/2016
-- do not set out val if already exists as tag itself not there
NULL;
END;
END p_get_node_value;
BEGIN
reqxml := REPLACE (reqxml, '&', CHR (ASCII ('&')) || 'amp;'); -- To handle &
v_mds_xml_parser := DBMS_XMLPARSER.newparser;
xmlparser.parseclob (v_mds_xml_parser, reqxml);
v_mds_xml_doc := DBMS_XMLPARSER.getdocument (v_mds_xml_parser);
/* Checking Parent Node is exists or Not and Raising Exception if not present*/
v_Release_node :=
xmldom.item (xmldom.getelementsbytagname (v_mds_xml_doc, 'Release'), 0);
IF (xmldom.isnull (v_Release_node))
THEN
RAISE node_not_exists;
END IF;
/*ShipToLocationRef */
v_ShipToLocationRef_list :=
xmldom.getchildrenbytagname (xmldom.makeelement (v_Release_node),
'ShipToLocationRef');
v_ShipToLocationRef_node := xmldom.item (v_ShipToLocationRef_list, 0);
/*LocationRef */
v_LocationRef_list :=
xmldom.getchildrenbytagname (
xmldom.makeelement (v_ShipToLocationRef_node),
'LocationRef');
v_LocationRef_node := xmldom.item (v_LocationRef_list, 0);
/*Location */
v_Location_list :=
xmldom.getchildrenbytagname (xmldom.makeelement (v_LocationRef_node),
'Location');
v_Location_node := xmldom.item (v_Location_list, 0);
p_get_node_value (v_TransactionCode, v_Location_node, 'TransactionCode');
DBMS_OUTPUT.PUT_LINE ('v_TransactionCode=' || v_TransactionCode);
/*LocationGid */
v_LocationGid_list :=
xmldom.getchildrenbytagname (xmldom.makeelement (v_LocationRef_node),
'LocationGid');
v_LocationGid_node := xmldom.item (v_LocationGid_list, 0);
/*Gid */
v_Gid_list :=
xmldom.getchildrenbytagname (xmldom.makeelement (v_LocationGid_node),
'Gid');
v_Gid_node := xmldom.item (v_Gid_list, 0);
p_get_node_value (v_DomainName, v_Gid_node, 'DomainName');
p_get_node_value (v_Xid, v_Gid_node, 'Xid');
DBMS_OUTPUT.PUT_LINE ('v_DomainName=' || v_DomainName);
DBMS_OUTPUT.PUT_LINE ('v_Xid=' || v_Xid);
p_get_node_value (v_LocationName, v_Location_node, 'TransactionCode');
DBMS_OUTPUT.PUT_LINE ('v_LocationName=' || v_LocationName);
/*Address*/
v_Address_list :=
xmldom.getchildrenbytagname (xmldom.makeelement (v_Location_node),
'Address');
v_Address_node := xmldom.item (v_Address_list, 0);
p_get_node_value (v_AddressLine1, v_Address_node, 'AddressLine1');
p_get_node_value (v_AddressLine2, v_Address_node, 'AddressLine2');
p_get_node_value (v_city, v_Address_node, 'City');
p_get_node_value (v_Province, v_Address_node, 'Province');
p_get_node_value (v_PostalCode, v_Address_node, 'PostalCode');
DBMS_OUTPUT.PUT_LINE ('v_AddressLine1=' || v_AddressLine1);
DBMS_OUTPUT.PUT_LINE ('v_AddressLine2=' || v_AddressLine2);
DBMS_OUTPUT.PUT_LINE ('v_city=' || v_city);
DBMS_OUTPUT.PUT_LINE ('v_Province=' || v_Province);
DBMS_OUTPUT.PUT_LINE ('v_PostalCode=' || v_PostalCode);
/*CountryCode*/
v_CountryCode_list :=
xmldom.getchildrenbytagname (xmldom.makeelement (v_Address_node),
'Address');
v_CountryCode_node := xmldom.item (v_Address_list, 0);
p_get_node_value (v_CountryCode, v_CountryCode_node, 'CountryCode');
DBMS_OUTPUT.PUT_LINE ('v_CountryCode=' || v_CountryCode);
EXCEPTION
WHEN node_not_exists
THEN
DBMS_OUTPUT.put_line ('No node exists with the request XML');
WHEN OTHERS
THEN
DBMS_OUTPUT.put_line (
'Oracle Error Number:'
|| SQLCODE
|| 'Oracle Error Message:'
|| SQLERRM);
END;
/
SET SERVEROUTPUT ON;
DECLARE
v_mds_xml_parser DBMS_XMLPARSER.parser;
v_mds_xml_doc DBMS_XMLDOM.domdocument;
v_Release_node xmldom.domnode;
node_not_exists EXCEPTION;
v_ShipToLocationRef_list xmldom.domnodelist;
v_ShipToLocationRef_node xmldom.domnode;
v_LocationRef_list xmldom.domnodelist;
v_LocationRef_node xmldom.domnode;
v_Location_list xmldom.domnodelist;
v_Location_node xmldom.domnode;
v_TransactionCode VARCHAR2 (1000) := NULL;
v_LocationGid_list xmldom.domnodelist;
v_LocationGid_node xmldom.domnode;
v_Gid_list xmldom.domnodelist;
v_Gid_node xmldom.domnode;
v_DomainName VARCHAR2 (1000) := NULL;
v_Xid VARCHAR2 (1000) := NULL;
v_LocationName VARCHAR2 (1000) := NULL;
v_Address_list xmldom.domnodelist;
v_Address_node xmldom.domnode;
v_AddressLine1 VARCHAR2 (100) := NULL;
v_AddressLine2 VARCHAR2 (100) := NULL;
v_City VARCHAR2 (100) := NULL;
v_Province VARCHAR2 (100) := NULL;
v_PostalCode VARCHAR2 (100) := NULL;
v_CountryCode_list xmldom.domnodelist;
v_CountryCode_node xmldom.domnode;
v_CountryCode VARCHAR2 (100) := NULL;
reqxml CLOB
:= '<sample:Release xmlns:sample="http://xmlns.oracle.com/apps/sample/transmission/v6.4" xmlns:gtm="http://xmlns.oracle.com/apps/gtm/transmission/v6.4">
<sample:ReleaseGid>
<sample:Gid>
<sample:DomainName>ABC</sample:DomainName>
<sample:Xid>1234</sample:Xid>
</sample:Gid>
</sample:ReleaseGid>
<sample:TransactionCode>CR</sample:TransactionCode>
<sample:ShipToLocationRef>
<sample:LocationRef>
<sample:Location>
<sample:TransactionCode>KK</sample:TransactionCode>
<sample:LocationGid>
<sample:Gid>
<sample:DomainName>ABC</sample:DomainName>
<sample:Xid>87901111</sample:Xid>
</sample:Gid>
</sample:LocationGid>
<sample:LocationName>MADIWALA</sample:LocationName>
<sample:Address>
<sample:AddressLine1>41, BTM LAYOUT</sample:AddressLine1>
<sample:AddressLine2/>
<sample:City>BANGALORE</sample:City>
<sample:Province/>
<sample:PostalCode>560076</sample:PostalCode>
<sample:CountryCode>
<sample:CountryCode2>KR</sample:CountryCode2>
</sample:CountryCode>
</sample:Address>
<sample:Contact>
<sample:ContactGid>
<sample:Gid>
<sample:DomainName>ABC</sample:DomainName>
<sample:Xid>87901111</sample:Xid>
</sample:Gid>
</sample:ContactGid>
<sample:IsPrimaryContact>Y</sample:IsPrimaryContact>
</sample:Contact>
<sample:LocationRole>
<sample:LocationRoleGid>
<sample:Gid>
<sample:DomainName>PUBLIC</sample:DomainName>
<sample:Xid>SHIPFROM/SHIPTO</sample:Xid>
</sample:Gid>
</sample:LocationRoleGid>
</sample:LocationRole>
</sample:Location>
</sample:LocationRef>
</sample:ShipToLocationRef>
</sample:Release>';
FUNCTION f_verify_and_gettag_value (i_elem xmldom.domelement,
i_tagname VARCHAR2)
RETURN VARCHAR2
IS
pnodelist xmldom.domnodelist;
pnode xmldom.domnode;
pelement xmldom.domelement;
e_xmltag_notexists EXCEPTION;
BEGIN
pnodelist := xmldom.getchildrenbytagname (i_elem, i_tagname);
pnode := xmldom.item (pnodelist, 0);
IF (xmldom.isnull (pnode))
THEN
RAISE e_xmltag_notexists;
END IF;
IF xmldom.haschildnodes (pnode)
THEN
IF (xmldom.getnodetype (pnode) = xmldom.element_node)
THEN
pnode := xmldom.getfirstchild (pnode);
RETURN (xmldom.getnodevalue (pnode));
END IF;
END IF;
RETURN NULL;
EXCEPTION
WHEN e_xmltag_notexists
THEN
RETURN NULL;
END f_verify_and_gettag_value;
PROCEDURE p_get_node_value (io_outval IN OUT VARCHAR2,
i_tagnode xmldom.domnode,
i_tagname VARCHAR2)
IS
tagval VARCHAR2 (30000);
e_xmltag_notexists EXCEPTION;
BEGIN
BEGIN
tagval :=
f_verify_and_gettag_value (xmldom.makeelement (i_tagnode),
i_tagname);
io_outval := tagval;
EXCEPTION
WHEN e_xmltag_notexists
THEN
io_outval := NULL;
-- mr8328 on 12/01/2016
-- do not set out val if already exists as tag itself not there
NULL;
END;
END p_get_node_value;
BEGIN
reqxml := REPLACE (reqxml, '&', CHR (ASCII ('&')) || 'amp;'); -- To handle &
v_mds_xml_parser := DBMS_XMLPARSER.newparser;
xmlparser.parseclob (v_mds_xml_parser, reqxml);
v_mds_xml_doc := DBMS_XMLPARSER.getdocument (v_mds_xml_parser);
/* Checking Parent Node is exists or Not and Raising Exception if not present*/
v_Release_node :=
xmldom.item (xmldom.getelementsbytagname (v_mds_xml_doc, 'Release'), 0);
IF (xmldom.isnull (v_Release_node))
THEN
RAISE node_not_exists;
END IF;
/*ShipToLocationRef */
v_ShipToLocationRef_list :=
xmldom.getchildrenbytagname (xmldom.makeelement (v_Release_node),
'ShipToLocationRef');
v_ShipToLocationRef_node := xmldom.item (v_ShipToLocationRef_list, 0);
/*LocationRef */
v_LocationRef_list :=
xmldom.getchildrenbytagname (
xmldom.makeelement (v_ShipToLocationRef_node),
'LocationRef');
v_LocationRef_node := xmldom.item (v_LocationRef_list, 0);
/*Location */
v_Location_list :=
xmldom.getchildrenbytagname (xmldom.makeelement (v_LocationRef_node),
'Location');
v_Location_node := xmldom.item (v_Location_list, 0);
p_get_node_value (v_TransactionCode, v_Location_node, 'TransactionCode');
DBMS_OUTPUT.PUT_LINE ('v_TransactionCode=' || v_TransactionCode);
/*LocationGid */
v_LocationGid_list :=
xmldom.getchildrenbytagname (xmldom.makeelement (v_LocationRef_node),
'LocationGid');
v_LocationGid_node := xmldom.item (v_LocationGid_list, 0);
/*Gid */
v_Gid_list :=
xmldom.getchildrenbytagname (xmldom.makeelement (v_LocationGid_node),
'Gid');
v_Gid_node := xmldom.item (v_Gid_list, 0);
p_get_node_value (v_DomainName, v_Gid_node, 'DomainName');
p_get_node_value (v_Xid, v_Gid_node, 'Xid');
DBMS_OUTPUT.PUT_LINE ('v_DomainName=' || v_DomainName);
DBMS_OUTPUT.PUT_LINE ('v_Xid=' || v_Xid);
p_get_node_value (v_LocationName, v_Location_node, 'TransactionCode');
DBMS_OUTPUT.PUT_LINE ('v_LocationName=' || v_LocationName);
/*Address*/
v_Address_list :=
xmldom.getchildrenbytagname (xmldom.makeelement (v_Location_node),
'Address');
v_Address_node := xmldom.item (v_Address_list, 0);
p_get_node_value (v_AddressLine1, v_Address_node, 'AddressLine1');
p_get_node_value (v_AddressLine2, v_Address_node, 'AddressLine2');
p_get_node_value (v_city, v_Address_node, 'City');
p_get_node_value (v_Province, v_Address_node, 'Province');
p_get_node_value (v_PostalCode, v_Address_node, 'PostalCode');
DBMS_OUTPUT.PUT_LINE ('v_AddressLine1=' || v_AddressLine1);
DBMS_OUTPUT.PUT_LINE ('v_AddressLine2=' || v_AddressLine2);
DBMS_OUTPUT.PUT_LINE ('v_city=' || v_city);
DBMS_OUTPUT.PUT_LINE ('v_Province=' || v_Province);
DBMS_OUTPUT.PUT_LINE ('v_PostalCode=' || v_PostalCode);
/*CountryCode*/
v_CountryCode_list :=
xmldom.getchildrenbytagname (xmldom.makeelement (v_Address_node),
'Address');
v_CountryCode_node := xmldom.item (v_Address_list, 0);
p_get_node_value (v_CountryCode, v_CountryCode_node, 'CountryCode');
DBMS_OUTPUT.PUT_LINE ('v_CountryCode=' || v_CountryCode);
EXCEPTION
WHEN node_not_exists
THEN
DBMS_OUTPUT.put_line ('No node exists with the request XML');
WHEN OTHERS
THEN
DBMS_OUTPUT.put_line (
'Oracle Error Number:'
|| SQLCODE
|| 'Oracle Error Message:'
|| SQLERRM);
END;
/
v_TransactionCode=NP
v_DomainName=
v_Xid=
v_LocationName=NP
v_AddressLine1=189, GASAN DIGITAL 1-RO
v_AddressLine2=
v_city=GEUMCHEON-GU
v_Province=
v_PostalCode=08503
v_CountryCode=
PL/SQL procedure successfully completed.
SQL>
No comments:
Post a Comment