Loading XML Data into Oracle(with Namespace)
Am a Newbee for XML to Oracle thing so beg yr pardon if my Q'n seems a very "entry level" thing....I searched wherever I could and thought give a try here :-)
My Requirment is to read the repeating attributes from this XML String
1. CREATE GLOBAL TEMPORARY TABLE TEMP_MQ_TABLE OF SYS.XMLTYPE
2.
Insert into TEMP_MQ_TABLE values
(XMLTYPE (
'<mes:QueryPartItemRevisionResponseMessage xmlns:mes="http://xml.namespaces.test.com/im/dsp/services/managepartitem/message" xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
<par:PartItem xmlns:par="http://xml.namespaces.test.com/im/dsp/cdm/data/partitem">
<par:PartItemAlternateIdentifier>
<par:AlternateIdentifierSourceId>XYZ</par:AlternateIdentifierSourceId>
<par:PartItemAlternateIdTypeCode>Type Code1</par:PartItemAlternateIdTypeCode>
<par:PartItemAlternateIdVal/>
</par:PartItemAlternateIdentifier>
<par:PartItemAlternateIdentifier>
<par:AlternateIdentifierSourceId>XYZ</par:AlternateIdentifierSourceId>
<par:PartItemAlternateIdTypeCode>Type Code2</par:PartItemAlternateIdTypeCode>
<par:PartItemAlternateIdVal/>
</par:PartItemAlternateIdentifier>
<par:PartItemAlternateIdentifier>
<par:AlternateIdentifierSourceId>ABC</par:AlternateIdentifierSourceId>
<par:PartItemAlternateIdTypeCode>Type Code3</par:PartItemAlternateIdTypeCode>
<par:PartItemAlternateIdVal>00123456</par:PartItemAlternateIdVal>
</par:PartItemAlternateIdentifier>
</par:PartItem>
</mes:QueryPartItemRevisionResponseMessage>')
)
3. Now, I need to Query the Multiple Typecodes "PartItemAlternateIdTypeCode" and their Values "PartItemAlternateIdVal"
Select extractValue(value(stmt),'par:PartItemAlternateIdTypeCode') AttrType,
extractValue(value(val),'par:PartItemAlternateIdVal') AttrVal
from TEMP_MQ_TABLE i,
table(xmlsequence(extract(i.object_value,'/mes:QueryPartItemRevisionResponseMessage/par:PartItem/par:PartItemAlternateIdentifier'))) id,
table(xmlsequence(extract(value(id),'/par:PartItem/par:PartItemAlternateIdentifier/par:PartItemAlternateIdTypeCode'))) stmt,
table(xmlsequence(extract(value(id),'/par:PartItem/par:PartItemAlternateIdentifier/par:PartItemAlternateIdVal'))) val,
XMLTable(XMLNAMESPACES (
'http://xml.namespaces.test.com/im/dsp/services/managepartitem/message' AS "mes",
'http://schemas.xmlsoap.org/soap/envelope/' AS "env",
'http://xml.namespaces.test.com/im/dsp/cdm/data/partitem' AS "par"
),'/mes:QueryPartItemRevisionResponseMessage/par:PartItem/par:PartItemAlternateIdentifier' PASSING i.OBJECT_VALUE
COLUMNS
MCode VARCHAR2(25) PATH 'par:PartItemAlternateIdentifier/par:PartItemAlternateIdTypeCode',
MVal VARCHAR2(5) PATH 'par:PartItemAlternateIdentifier/par:PartItemAlternateIdVal')
When I run this Query, I get the error message
ORA-31011: XML parsing failed
ORA-19202: Error occurred in XML processing
LPX-00601: Invalid token in: '/mes:QueryPartItemRevisionResponseMessage/par:PartItem/par:PartItemAlternateIdentifier'
Not sure what I am doing wrong. I get this error ONLY when have these NAMESPACES.
I am able to query when I donot have these Namespaces in my XML String
The Query I used in the later case is
Select extractValue(value(stmt),'PartItemAlternateIdTypeCode') AttrType,
extractValue(value(val),'PartItemAlternateIdVal') AttrVal
from XRX.TEMP_MQ_TABLE,
table(xmlsequence(extract(object_value,'/QueryPartItemRevisionResponseMessage/PartItemAlternateIdentifier'))) id,
table(xmlsequence(extract(value(id),'/PartItemAlternateIdentifier/PartItemAlternateIdTypeCode'))) stmt,
table(xmlsequence(extract(value(id),'/PartItemAlternateIdentifier/PartItemAlternateIdVal'))) val
Any input to crack this is highly appreciated
Thanks for your time