This discussion is archived
4 Replies Latest reply: Jul 19, 2012 12:42 AM by 936056 RSS

xml parsing issue with the existsnode function

936056 Newbie
Currently Being Moderated
Hi Friends,

I have a question as like below

We have the contacts and alternate contacts request as like below.

<TXLife>
<UserAuthRequest>
<UserLoginName>hqtest24</UserLoginName>
<UserDate>2012-07-11</UserDate>
<UserTime>12:42:55</UserTime>
</UserAuthRequest>
<TXLifeRequest>
<TransRefGUID>0c95642d-663a-455f-bd92-aca678538986</TransRefGUID>
<TransType tc="1204">OLI_TRANS_TRNPARTY</TransType>
<TransExeDate>2012-07-11</TransExeDate>
<TransExeTime>12:42:55</TransExeTime>
<InquiryLevel tc="3">OLI_INQUIRY_OBJRELOBJ</InquiryLevel>
<InquiryView>
<InquiryViewCode>INTERMEDIARYUPDATE-CHBM-1204A</InquiryViewCode>
</InquiryView>
<OLifE>
<SourceInfo>
<SourceInfoName>CHBM Admin Tool</SourceInfoName>
</SourceInfo>
<Party id="Intermediary1">
<PartyTypeCode tc="2">OLI_PT_ORG</PartyTypeCode>
<PartySysKey SystemCode="CHBM">111259</PartySysKey>
<FullName>Example Law Firm test</FullName>
<Organization>
<DBA>Example Law Firm test</DBA>
</Organization>
<Address>
<AddressTypeCode tc="2">OLI_ADTYPE_BUS</AddressTypeCode>
<Line1>20 Yellow Brick Rd</Line1>
<Line2>Suite 23</Line2>
<Line3>line 3</Line3>
<City>wonderland34</City>
<AddressState>NY</AddressState>
<Zip>229292</Zip>
<AddressCountry>US</AddressCountry>
</Address>
<Phone>
<PhoneTypeCode tc="2">OLI_PHONETYPE_BUS</PhoneTypeCode>
<DialNumber></DialNumber>
</Phone>
<Phone>
<PhoneTypeCode tc="19">OLI_PHONETYPE_FAX</PhoneTypeCode>
<DialNumber></DialNumber>
</Phone>
<Attachment id="Attachment1">
<DateCreated>2012-07-11</DateCreated>
<UserCode>hqtest24</UserCode>
<AttachmentBasicType tc="1">Text</AttachmentBasicType>
<AttachmentSource>ATTORNEY</AttachmentSource>
<Description>INTERMEDIARY TYPE UPDATED</Description>
<AttachmentData>Attorney</AttachmentData>
<AttachmentType tc="1009800001">Transaction Log</AttachmentType>
<AttachmentLocation tc="1">Inline</AttachmentLocation>
<OLifEExtension VendorCode="0098" ExtensionCode="Attachment">
<AttachmentExtension>
<CreationTime>12:42:55</CreationTime>
<Sequence>1</Sequence>
</AttachmentExtension>
</OLifEExtension>
</Attachment>
<Attachment id="Attachment2">
<DateCreated>2012-07-11</DateCreated>
<UserCode>hqtest24</UserCode>
<AttachmentBasicType tc="1">Text</AttachmentBasicType>
<AttachmentSource>James</AttachmentSource>
<Description>ALTERNATE CONTACT FIRST NAME UPDATED</Description>
<AttachmentType tc="1009800001">Transaction Log</AttachmentType>
<AttachmentLocation tc="1">Inline</AttachmentLocation>
<OLifEExtension VendorCode="0098" ExtensionCode="Attachment">
<AttachmentExtension>
<CreationTime>12:42:55</CreationTime>
<Sequence>2</Sequence>
</AttachmentExtension>
</OLifEExtension>
</Attachment>
<Attachment id="Attachment3">
<DateCreated>2012-07-11</DateCreated>
<UserCode>hqtest24</UserCode>
<AttachmentBasicType tc="1">Text</AttachmentBasicType>
<AttachmentSource>Mathew</AttachmentSource>
<Description>ALTERNATE CONTACT LAST NAME UPDATED</Description>
<AttachmentType tc="1009800001">Transaction Log</AttachmentType>
<AttachmentLocation tc="1">Inline</AttachmentLocation>
<OLifEExtension VendorCode="0098" ExtensionCode="Attachment">
<AttachmentExtension>
<CreationTime>12:42:55</CreationTime>
<Sequence>3</Sequence>
</AttachmentExtension>
</OLifEExtension>
</Attachment>
<EMailAddress>
<EMailType tc="1">Business</EMailType>
<AddrLine></AddrLine>
</EMailAddress>
<URL>
<URLAddr>www.example.com</URLAddr>
<URLType tc="1">Home Page</URLType>
</URL>
</Party>
<Activity id="Activity1" HoldingID="Intermediary1">
<UserCode>hqtest24</UserCode>
<LastUpdate>2012-07-11</LastUpdate>
<ActivityCode>CHBM10004</ActivityCode>
<OLifEExtension VendorCode="0098" ExtensionCode="Activity">
<ActivityExtension>
<SubActivityCode>CHBM20002</SubActivityCode>
<LastUpdateTime>12:42:55</LastUpdateTime>
</ActivityExtension>
</OLifEExtension>
</Activity>
<Party id="Contact1">
<PartyTypeCode tc="1">OLI_PT_PERSON</PartyTypeCode>
<PartySysKey>555223</PartySysKey>
<Person>
<FirstName>Jack</FirstName>
<LastName>Scarecrow23</LastName>
</Person>
<Phone>
<PhoneTypeCode tc="2">OLI_PHONETYPE_BUS</PhoneTypeCode>
<DialNumber>2223993993</DialNumber>
</Phone>
<Phone>
<PhoneTypeCode tc="19">OLI_PHONETYPE_FAX</PhoneTypeCode>
<DialNumber>2223392020</DialNumber>
</Phone>
<EMailAddress>
<EMailType tc="1">Business</EMailType>
<AddrLine>jack.scarecrow@example.com</AddrLine>
</EMailAddress>
</Party>
<Relation id="Relation1" OriginatingObjectID="Intermediary1" RelatedObjectID="Contact1">
<RelationRoleCode tc="150">Authorized Person</RelationRoleCode>
</Relation>
<Relation id="Relation1" OriginatingObjectID="Intermediary1">
<RelationRoleCode tc="104">Intermediary</RelationRoleCode>
<RelationDescription tc="42">Attorney</RelationDescription>
</Relation>
<Party id="Contact2">
<PartyTypeCode tc="1">OLI_PT_PERSON</PartyTypeCode>
<PartySysKey>556915</PartySysKey>
<Person>
<FirstName/>
<LastName/>
</Person>
<Phone>
<PhoneTypeCode tc="2">OLI_PHONETYPE_BUS</PhoneTypeCode>
<DialNumber>2343434</DialNumber>
</Phone>
<Phone>
<PhoneTypeCode tc="19">OLI_PHONETYPE_FAX</PhoneTypeCode>
<DialNumber>45345345</DialNumber>
</Phone>
<EMailAddress>
<EMailType tc="1">Business</EMailType>
<AddrLine>jack.scarecrow@ex.com</AddrLine>
</EMailAddress>
</Party>
<Relation id="Relation4" OriginatingObjectID="Intermediary1" RelatedObjectID="Contact2">
<OriginatingObjectType tc="6">Party</OriginatingObjectType>
<RelatedObjectType tc="6">Party</RelatedObjectType>
<RelationRoleCode tc="150">Authorized Person</RelationRoleCode>
<InterestPercent>-1.0</InterestPercent>
<Sequence>2</Sequence>
</Relation>
</OLifE>
</TXLifeRequest>
</TXLife>


From the above request we have to parse the alternate contact details.

In the procedure we are using as like below


FOR b IN (
SELECT t.vAltCntcity vAltCntcity,
t.Partysyskey Partysyskey,
t.vAltCntZip vAltCntZip,
t.vAltCntGovtID vAltCntGovtID,
t.vAltCntTelno vAltCntTelno,
t.vAltCntemailaddr vAltCntemailaddr,
t.vAltCntstats vAltCntstats,
t.vAltCntAdd1 vAltCntAdd1,
t.vAltCntAdd2 vAltCntAdd2,
t.vAltCntAdd3 vAltCntAdd3,
t.AltCntstate AltCntstate,
t.AltCntcntry AltCntcntry,
t.vAltCntBRTH_DT vAltCntBRTH_DT,
t.vAltCntGender vAltCntGender,
t.vAltCntFaxno vAltCntFaxno,
t.vAltCnturladdr vAltCnturladdr,
t.AltCntorgFST_NM AltCntorgFST_NM,
t.AltCntorgLST_NM AltCntorgLST_NM,
t.AltCntorgMID_NM AltCntorgMID_NM,
t.AltCntorgPFX_NM AltCntorgPFX_NM,
t.AltCntorgSUFX_NM AltCntorgSUFX_NM,
t.AltCntpartytypecode AltCntpartytypecode,
t.vAltCntdatarep vAltCntdatarep,
t1.vAltCntInterestPercent vAltCntInterestPercent,
t1.ROID ROID
FROM (
SELECT xData doc FROM dual ) temp_table,
XMLTable ( '/TXLife/TXLifeRequest/OLifE/Relation[RelationRoleCode/@tc=150][Sequence=2]' passing doc
COLUMNS OOID varchar2(50) path '@OriginatingObjectID'
, ROID varchar2(50) path '@RelatedObjectID'
, vAltCntInterestpercent varchar2(100) path 'InterestPercent'
)t1,
XMLTable('/Party[@id=$roid]' passing vAltcnt, t1.roid as "roid"
COLUMNS
vAltCntcity VARCHAR2(20) path 'City',
Partysyskey VARCHAR2(100) path 'PartySysKey',
vAltCntZip VARCHAR2(20) path 'Address/Zip',
vAltCntGovtID VARCHAR2(20) path 'GovtID',
vAltCntTelno VARCHAR2(20) path 'Phone[PhoneTypeCode/@tc=2]/DialNumber',
vAltCntemailaddr VARCHAR2(200) path 'EMailAddress/AddrLine',
vAltCntstats varchar2(20) path 'Client/ClientStatus/@tc',
vAltCntAdd1 varchar2(1000) path 'Address/Line1',
vAltCntAdd2 varchar2(1000) path 'Address/Line2',
vAltCntAdd3 varchar2(1000) path 'Address/Line3',
AltCntstate varchar2(100) path 'Address/AddressState',
AltCntcntry varchar2(100) path 'Address/AddressCountry',
vAltCntBRTH_DT date path 'Person/BirthDate',
vAltCntGender char(1) path 'Person/Gender/@tc',
vAltCntFaxno varchar2(100) path 'Phone[PhoneTypeCode/@tc=19]/DialNumber',
vAltCnturladdr varchar2(100) path 'URL/URLAddr',
AltCntorgFST_NM varchar2(100) path 'Person/FirstName',
AltCntorgLST_NM varchar2(100) path 'Person/LastName',
AltCntorgMID_NM varchar2(100) path 'Person/MiddleName',
AltCntorgPFX_NM varchar2(100) path 'Person/Prefix',
AltCntorgSUFX_NM varchar2(100) path 'Person/Suffix',
AltCntpartytypecode varchar2(10) path 'PartyTypeCode/@tc',
vAltCntdatarep varchar2(100) path '@DataRep'
) t
)
LOOP

BEGIN
SELECT extractvalue(value(t),'/OLifE/Party[@id=/OLifE/Relation[RelationRoleCode/@tc=150][Sequence=2]/b.ROID][PartyTypeCode/@tc=1]/Person/FirstName')
INTO vAltCntFirstnamechk
FROM TABLE (XMLSEQUENCE (EXTRACT (xData,'/TXLife/TXLifeRequest/OLifE'))) t
WHERE existsnode(value(t),'/OLifE/Party[@id=/OLifE/Relation[RelationRoleCode/@tc=150][Sequence=2]/b.ROID][PartyTypeCode/@tc=1]/Person/FirstName') =1;
EXCEPTION
WHEN NO_DATA_FOUND THEN
vAltCntFirstnamechkflag:='Y';
END;

BEGIN
SELECT extractvalue(value(t),'/OLifE/Party[@id=/OLifE/Relation[RelationRoleCode/@tc=150][Sequence=2]/b.ROID][PartyTypeCode/@tc=1]/Person/LastName')
INTO vAltCntLastNamechk
FROM TABLE (XMLSEQUENCE (EXTRACT (xData,'/TXLife/TXLifeRequest/OLifE'))) t
WHERE existsnode(value(t),'/OLifE/Party[@id=/OLifE/Relation[RelationRoleCode/@tc=150][Sequence=2]/b.ROID][PartyTypeCode/@tc=1]/Person/LastName') =1;
EXCEPTION
WHEN NO_DATA_FOUND THEN
vAltCntLastNamechkflag:='Y';
END;

END LOOP;

Here while parsing the data for contact2(with the request provided) by using the above procedure its going to exception.

If the value is not there between the firstname then it should not go to the exception.

If the firstname tag is not there it should go to the exception.

But in the above procedure for the altcntfirstname and altcntlastname selectstatements its going to the exception part when there is no value for firstname(<FirstName></FirstName>).

Is there any way to resolve this issue?


Regards,
Jyothirmai
  • 1. Re: xml parsing issue with the existsnode function
    odie_63 Guru
    Currently Being Moderated
    Hi,

    A few comments for starters :

    - You don't need this :
    (
    SELECT xData doc FROM dual ) temp_table,
    Just pass directly your variable :
    PASSING xData
    - I can't run your query because <tt>vAltcnt</tt> is not defined anywhere.

    I guess that is not the code you're actually using, so it doesn't help much to post it.
    For example, this doesn't make sense :
    '/OLifE/Party[@id=/OLifE/Relation[RelationRoleCode/@tc=150][Sequence=2]/b.ROID][PartyTypeCode/@tc=1]/Person/FirstName'
    What's that <tt>b.ROID</tt> in the middle of a string? It shouldn't even compile.
    And why accessing the very same node again, using deprecated functions this time??

    Explain what you're trying to do, give some working pieces of code and we may be able to help.

    Thanks.
  • 2. Re: xml parsing issue with the existsnode function
    936056 Newbie
    Currently Being Moderated
    Hi Odie,

    In the request more than one alternate contact used to come(that means contact1 is primary contact,contact2 is alternate contact1,contact3 is alternate contact2 etc).
    We are retrieving the RelatedObjectID and named as ROID in the for loop.


    That means in the for loop we are getting the RelatedObjectID,if that RelatedObjectID is equal to party id then that firstname we are checking by using the below select statement.

    suppose when we used as like below in the loop the same RelatedObjectID(contact2) is repeating every time.



    FOR b IN (
    SELECT t.vAltCntcity vAltCntcity,
    t.Partysyskey Partysyskey,
    t.vAltCntZip vAltCntZip,
    t.vAltCntGovtID vAltCntGovtID,
    t.vAltCntTelno vAltCntTelno,
    t.vAltCntemailaddr vAltCntemailaddr,
    t.vAltCntstats vAltCntstats,
    t.vAltCntAdd1 vAltCntAdd1,
    t.vAltCntAdd2 vAltCntAdd2,
    t.vAltCntAdd3 vAltCntAdd3,
    t.AltCntstate AltCntstate,
    t.AltCntcntry AltCntcntry,
    t.vAltCntBRTH_DT vAltCntBRTH_DT,
    t.vAltCntGender vAltCntGender,
    t.vAltCntFaxno vAltCntFaxno,
    t.vAltCnturladdr vAltCnturladdr,
    t.AltCntorgFST_NM AltCntorgFST_NM,
    t.AltCntorgLST_NM AltCntorgLST_NM,
    t.AltCntorgMID_NM AltCntorgMID_NM,
    t.AltCntorgPFX_NM AltCntorgPFX_NM,
    t.AltCntorgSUFX_NM AltCntorgSUFX_NM,
    t.AltCntpartytypecode AltCntpartytypecode,
    t.vAltCntdatarep vAltCntdatarep,
    t1.vAltCntInterestPercent vAltCntInterestPercent,
    t1.ROID ROID
    FROM (
    SELECT xData doc FROM dual ) temp_table,
    XMLTable ( '/TXLife/TXLifeRequest/OLifE/Relation[RelationRoleCode/@tc=150][Sequence=2]' passing doc
    COLUMNS OOID varchar2(50) path '@OriginatingObjectID'
    , ROID varchar2(50) path '@RelatedObjectID'
    , vAltCntInterestpercent varchar2(100) path 'InterestPercent'
    )t1,
    XMLTable('/Party[@id=$roid]' passing vAltcnt, t1.roid as "roid"
    COLUMNS
    vAltCntcity VARCHAR2(20) path 'City',
    Partysyskey VARCHAR2(100) path 'PartySysKey',
    vAltCntZip VARCHAR2(20) path 'Address/Zip',
    vAltCntGovtID VARCHAR2(20) path 'GovtID',
    vAltCntTelno VARCHAR2(20) path 'Phone[PhoneTypeCode/@tc=2]/DialNumber',
    vAltCntemailaddr VARCHAR2(200) path 'EMailAddress/AddrLine',
    vAltCntstats varchar2(20) path 'Client/ClientStatus/@tc',
    vAltCntAdd1 varchar2(1000) path 'Address/Line1',
    vAltCntAdd2 varchar2(1000) path 'Address/Line2',
    vAltCntAdd3 varchar2(1000) path 'Address/Line3',
    AltCntstate varchar2(100) path 'Address/AddressState',
    AltCntcntry varchar2(100) path 'Address/AddressCountry',
    vAltCntBRTH_DT date path 'Person/BirthDate',
    vAltCntGender char(1) path 'Person/Gender/@tc',
    vAltCntFaxno varchar2(100) path 'Phone[PhoneTypeCode/@tc=19]/DialNumber',
    vAltCnturladdr varchar2(100) path 'URL/URLAddr',
    AltCntorgFST_NM varchar2(100) path 'Person/FirstName',
    AltCntorgLST_NM varchar2(100) path 'Person/LastName',
    AltCntorgMID_NM varchar2(100) path 'Person/MiddleName',
    AltCntorgPFX_NM varchar2(100) path 'Person/Prefix',
    AltCntorgSUFX_NM varchar2(100) path 'Person/Suffix',
    AltCntpartytypecode varchar2(10) path 'PartyTypeCode/@tc',
    vAltCntdatarep varchar2(100) path '@DataRep'
    ) t
    )
    LOOP

    BEGIN
    SELECT extractvalue(value(t),'/OLifE/Party[@id=/OLifE/Relation[RelationRoleCode/@tc=150][Sequence=2]/@RelatedObjectID][PartyTypeCode/@tc=1]/Person/FirstName')
    INTO vAltCntFirstnamechk
    FROM TABLE (XMLSEQUENCE (EXTRACT (xData,'/TXLife/TXLifeRequest/OLifE'))) t
    WHERE existsnode(value(t),'/OLifE/Party[@id=/OLifE/Relation[RelationRoleCode/@tc=150][Sequence=2]/@RelatedObjectID][PartyTypeCode/@tc=1]/Person/FirstName') =1;
    EXCEPTION
    WHEN NO_DATA_FOUND THEN
    vAltCntFirstnamechkflag:='Y';
    END;
    end loop;

    For this above code its not going to the exception.we are using this select statement to check whether that node existed or not.

    If that node exists and value is not there, that time we are updating the table with the null value by using the vAltCntFirstnamechkflag value as like below in our procedure.


    IF b.AltCntorgFST_NM IS NOT NULL THEN
    cAltCntpsnUpdateflag:='Y';
    vAltCntpsnupdatequery:=vAltCntpsnupdatequery||' FST_NM ='''||b.AltCntorgFST_NM||''''||',';
    ELSIF vAltCntFirstnamechkflag='N' AND vAltCntFirstnamechk IS NULL THEN
    cAltCntpsnUpdateflag:='Y';
    vAltCntpsnupdatequery:=vAltCntpsnupdatequery||' FST_NM ='''||NULL||''''||',';
    END IF;

    Please find the below procedure what we are using could you please let me know is there any possibility to resolve this issue(if the tag like <firstname></firstname> that
    time also it should not go to the exception).

    CREATE OR REPLACE PROCEDURE CHBM_QA1.PR_CUSTOMERUPDATE(PIN_XML_DATA IN CLOB,po_vResponse OUT clob )
    IS
    xData XMLTYPE:=NULL;
    vActivityCode VARCHAR2(100):=NULL;
    vSubActivityCode VARCHAR2(100):=NULL;
    ncode NUMBER(2):=NULL;
    nErrcode NUMBER(10):=0;
    vInfodesc VARCHAR2(1000):=NULL;
    vStatusinfo VARCHAR2(1000):=NULL;
    vStatus VARCHAR2(100):=NULL;
    vOrgid VARCHAR2(100):=NULL;
    vcity VARCHAR2(100):=NULL;
    vAltCntcity VARCHAR2(20):=NULL;
    vorgcity VARCHAR2(100):=NULL;
    vAddressState VARCHAR2(100):=NULL;
    vZip VARCHAR2(100):=NULL;
    vAltCntZip VARCHAR2(100):=NULL;
    vorgZip VARCHAR2(100):=NULL;
    vGovtID VARCHAR2(100):=NULL;
    vAltCntGovtID VARCHAR2(100):=NULL;
    vorgGovtID VARCHAR2(100):=NULL;
    vFullname VARCHAR2(200):=NULL;
    norgid NUMBER:=0;
    vTelno VARCHAR2(100):=Null;
    vAltCntTelno VARCHAR2(100):=Null;
    vOrgTelno VARCHAR2(100):=null;
    nOrgcnt NUMBER:=0;
    vemailaddr VARCHAR2(200):=null;
    vAltCntemailaddr VARCHAR2(200):=null;
    vorgemailaddr VARCHAR2(200):=null;
    vFISC_YEAR_END_DT VARCHAR2(100);
    vFiscalYearEndMoDaychkflag CHAR(1):='N';
    vFiscalYearEndMoDaychk VARCHAR2(100):=NULL;
    vGovtIDchkflag CHAR(1):='N';
    vGovtIDchk VARCHAR2(100):=NULL;
    vEMailAddresschkflag CHAR(1):='N';
    vEMailAddresschk VARCHAR2(1000):=NULL;
    vDialNumberchkflag CHAR(1):='N';
    vAltCntDialNumberchkflag CHAR(1):='N';
    vDialNumberchk VARCHAR2(100):=NULL;
    vAltCntDialNumberchk VARCHAR2(100):=NULL;
    vFaxnochkflag CHAR(1):='N';
    vAltCntFaxnochkflag CHAR(1):='N';
    vFaxnochk VARCHAR2(100):=NULL;
    vAltCntFaxnochk VARCHAR2(100):=NULL;
    vEMailAddressPchkflag CHAR(1):=NULL;
    vAltCntEMailAddressPchkflag CHAR(1):=NULL;
    vEMailAddressPchk VARCHAR2(200):=NULL;
    vAltCntEMailAddressPchk VARCHAR2(200):=NULL;
    vLastNamechkflag CHAR(1):='N';
    vAltCntLastNamechkflag CHAR(1):='N';
    vFirstNamechkflag CHAR(1):='N';
    vAltCntFirstNamechkflag CHAR(1):='N';
    vTaxidPchkflag CHAR(1):='N';
    vAltCntTaxidPchkflag CHAR(1):='N';
    vBusinessDescchkflag CHAR(1):='N';
    vBusinessDescchk VARCHAR2(2000):=NUll;
    vTaxidPchk VARCHAR2(200):=NULL;
    vAltCntTaxidPchk VARCHAR2(200):=NULL;
    vLastNamechk VARCHAR2(2000):=NULL;
    vAltCntLastNamechk VARCHAR2(2000):=NULL;
    vFirstNamechk VARCHAR2(2000):=NULL;
    vAltCntFirstnamechk VARCHAR2(2000):=NULL;
    vattdate VARCHAR2(50):=NULL;
    dattdate DATE;
    vAdd3Pchkflag CHAR(1):='N';
    vAltCntAdd3Pchkflag CHAR(1):='N';
    vOrgAdd3chkflag CHAR(1):='N';
    vOrgAdd2chkflag CHAR(1):='N';
    vAdd2Pchkflag CHAR(1):='N';
    vAltCntAdd2Pchkflag CHAR(1):='N';
    vOrgAdd3chk VARCHAR2(2000):=NULL;
    vOrgAdd2chk VARCHAR2(2000):=NULL;
    vAdd2Pchk VARCHAR2(2000):=NULL;
    vAltCntAdd2Pchk VARCHAR2(2000):=NULL;
    vAdd3Pchk VARCHAR2(2000):=NULL;
    vAltCntAdd3Pchk VARCHAR2(2000):=NULL;
    nADDR_ID NUMBER:=0;
    cntry VARCHAR2(100):=NULL;
    AltCntcntry VARCHAR2(100):=NULL;
    orgcntry VARCHAR2(100):=NULL;
    vAdd1 VARCHAR2(1000):=NULL;
    vAdd2 VARCHAR2(1000):=NULL;
    vAdd3 VARCHAR2(1000):=NULL;
    vAltCntAdd1 VARCHAR2(1000):=NULL;
    vAltCntAdd2 VARCHAR2(1000):=NULL;
    vAltCntAdd3 VARCHAR2(1000):=NULL;
    vorgAdd1 VARCHAR2(1000):=NULL;
    vorgAdd2 VARCHAR2(1000):=NULL;
    vorgAdd3 VARCHAR2(1000):=NULL;
    state VARCHAR2(100):=NULL;
    AltCntstate VARCHAR2(100):=NULL;
    nptycnt NUMBER:=0;
    orgstate VARCHAR2(100):=NULL;
    vstats VARCHAR2(100):=NULL;
    vAltCntstats VARCHAR2(100):=NULL;
    norgvalue NUMBER:=0;
    nPtyrolCon NUMBER:=0;
    npsnid NUMBER:=0;
    npsn NUMBER:=0;
    dFISC_YEAR_END_DT date:=NULL;
    Gender char(1):=NULL;
    vAltCntGender char(1):=NULL;
    vBRTH_DT VARCHAR2(100):=NULL;
    vAltCntBRTH_DT VARCHAR2(100):=NULL;
    BusinessDesc VARCHAR2(200):=NULL;
    dBRTH_DT date:=NULL;
    dAltCntBRTH_DT date:=NULL;
    prmycnt VARCHAR2(100):=NULL;
    vpsnstats VARCHAR2(100):=NULL;
    vAltCntpsnstats VARCHAR2(100):=NULL;
    vPartySysKey VARCHAR2(100):=NULL;
    vFaxno VARCHAR2(100):=NULL;
    vAltCntFaxno VARCHAR2(100):=NULL;
    vorgFaxno VARCHAR2(100):=NULL;
    nRlplptyid CHBM_PARTY_RELATIONSHIP.ROLE_PLAYR_PRTY_ID%TYPE:=NULL;
    vurladdr VARCHAR2(100):=NULL;
    vAltCnturladdr VARCHAR2(100):=NULL;
    FST_NM VARCHAR2(100):=NULL;
    orgFST_NM VARCHAR2(100):=NULL;
    AltCntorgFST_NM VARCHAR2(100):=NULL;
    LST_NM VARCHAR2(100):=NULL;
    orgLST_NM VARCHAR2(100):=NULL;
    AltCntorgLST_NM VARCHAR2(100):=NULL;
    MID_NM VARCHAR2(100):=NULL;
    orgMID_NM VARCHAR2(100):=NULL;
    AltCntorgMID_NM VARCHAR2(100):=NULL;
    PFX_NM VARCHAR2(100):=NULL;
    orgPFX_NM VARCHAR2(100):=NULL;
    AltCntorgPFX_NM VARCHAR2(100):=NULL;
    SUFX_NM VARCHAR2(100):=NULL;
    orgSUFX_NM VARCHAR2(100):=NULL;
    AltCntorgSUFX_NM VARCHAR2(100):=NULL;
    naddcnt NUMBER:=0;
    nAltaddcnt NUMBER:=0;
    norgseq NUMBER:=NULL;
    nADDR_IDseq NUMBER:=NULL;
    npsnidseq NUMBER:=NULL;
    nAltCntpsnidseq NUMBER:=NULL;
    vTransrefguid VARCHAR2(1000):=NULL;
    nRecfound NUMBER:=0;
    partytypecode varchar2(100):=null;
    AltCntpartytypecode varchar2(100):=null;
    RelationRoleCode VARCHAR2(100):=NULL;
    cUpdateflag CHAR(1):='N';
    vupdatequery CLOB:=null;
    plancode varchar2(100):=null;
    usercreated VARCHAR2(200):=null;
    openeddate VARCHAR2(100);
    openedtime varchar2(100);
    vopeneddate VARCHAR2(100);
    dopeneddate date;
    naddrcnt NUMBER:=0;
    ncnt1 number:=0;
    ncnt2 number:=0;
    ncnt3 number:=0;
    ncnt4 number:=0;
    ncnt5 number:=0;
    ncnt6 number:=0;
    nDelCnt1 number:=0;
    nDelCnt2 number:=0;
    nDelCnt3 number:=0;
    nAltcnt4 number:=0;
    nAltcnt5 number:=0;
    nAltcnt6 number:=0;
    nRelcnt NUMBER:=0;
    nAltRelcnt NUMBER:=0;
    ncnt7 NUMBER:=0;
    nprscnt NUMBER:=0;
    nAltprscnt NUMBER:=0;
    nPlncnt NUMBER:=0;
    npsncnt NUMBER:=0;
    vaddupdatequery VARCHAR2(4000);
    caddUpdateflag CHAR(1):='N';
    vaddrupdatequery VARCHAR2(4000);
    vAltCntaddrupdatequery VARCHAR2(4000);
    caddrUpdateflag CHAR(1):='N';
    cAltCntaddrUpdateflag CHAR(1):='N';
    vpsnupdatequery VARCHAR2(4000);
    vAltCntpsnupdatequery VARCHAR2(4000);
    cpsnUpdateflag CHAR(1):='N';
    cAltCntpsnUpdateflag CHAR(1):='N';
    vCntInterestPercent VARCHAR2(200);
    vAltCntInterestPercent VARCHAR2(200);
    vCntdatarep varchar2(100);
    vAltCntdatarep varchar2(100);
    vAltcnt XMLTYPE:=NULL;
    eParsererror EXCEPTION;
    PRAGMA EXCEPTION_INIT(eParsererror,-31011);
    eUniqueexception EXCEPTION;
    PRAGMA EXCEPTION_INIT(eUniqueexception,-00001);
    eplanexception EXCEPTION;
    PRAGMA EXCEPTION_INIT(eplanexception,-02291);
    eEventexception EXCEPTION;
    PRAGMA EXCEPTION_INIT(eEventexception,-01400);

    BEGIN
    BEGIN
    xData := XMLTYPE.createxml(PIN_XML_DATA);
    END;

    BEGIN
    SELECT extractvalue(value(t),'/TXLifeRequest/TransRefGUID')
    INTO vTransrefguid
    FROM TABLE (XMLSEQUENCE (EXTRACT (xData,'/TXLife/TXLifeRequest'))) t
    WHERE existsnode(value(t),'/TXLifeRequest/TransRefGUID')=1
    AND extractvalue(value(t),'/TXLifeRequest/TransRefGUID') IS NOT NULL;
    EXCEPTION
    WHEN NO_DATA_FOUND THEN
    ncode:=5;
    nErrcode:=200;
    vStatus:='FAILURE';
    vStatusinfo:='General Data Error';
    Raise_application_error(-20201,'Transrefguid does not exist');
    END;

    BEGIN
    SELECT t.vActivityCode,
    t.vSubActivityCode
    INTO vActivityCode,
    vSubActivityCode
    FROM (
    SELECT xData doc
    FROM dual
    ) temp_table,
    XMLTable ( '/TXLife/TXLifeRequest/OLifE' passing doc
    COLUMNS
    vActivityCode VARCHAR2(20) path 'Activity/ActivityCode',
    vSubActivityCode VARCHAR2(20) path 'Activity/OLifEExtension/ActivityExtension/SubActivityCode'
    ) t;
    EXCEPTION
    WHEN NO_DATA_FOUND THEN
    ncode:=5;
    nErrcode:=200;
    vStatus:='FAILURE';
    vStatusinfo:='RESULTINFO_DATA ';
    Raise_application_error(-20201,'General Data Error');
    END;

    IF vActivityCode='CHBM10003' AND vSubActivityCode='CHBM20002' THEN

    FOR b IN (
    SELECT t.vAltCntcity vAltCntcity,
    t.Partysyskey Partysyskey,
    t.vAltCntZip vAltCntZip,
    t.vAltCntGovtID vAltCntGovtID,
    t.vAltCntTelno vAltCntTelno,
    t.vAltCntemailaddr vAltCntemailaddr,
    t.vAltCntstats vAltCntstats,
    t.vAltCntAdd1 vAltCntAdd1,
    t.vAltCntAdd2 vAltCntAdd2,
    t.vAltCntAdd3 vAltCntAdd3,
    t.AltCntstate AltCntstate,
    t.AltCntcntry AltCntcntry,
    t.vAltCntBRTH_DT vAltCntBRTH_DT,
    t.vAltCntGender vAltCntGender,
    t.vAltCntFaxno vAltCntFaxno,
    t.vAltCnturladdr vAltCnturladdr,
    t.AltCntorgFST_NM AltCntorgFST_NM,
    t.AltCntorgLST_NM AltCntorgLST_NM,
    t.AltCntorgMID_NM AltCntorgMID_NM,
    t.AltCntorgPFX_NM AltCntorgPFX_NM,
    t.AltCntorgSUFX_NM AltCntorgSUFX_NM,
    t.AltCntpartytypecode AltCntpartytypecode,
    t.vAltCntdatarep vAltCntdatarep,
    t1.vAltCntInterestPercent vAltCntInterestPercent,
    t1.ROID ROID
    FROM (
    SELECT xData doc FROM dual ) temp_table,
    XMLTable ( '/TXLife/TXLifeRequest/OLifE/Relation[RelationRoleCode/@tc=150][Sequence=2]' passing doc
    COLUMNS OOID varchar2(50) path '@OriginatingObjectID'
    , ROID varchar2(50) path '@RelatedObjectID'
    , vAltCntInterestpercent varchar2(100) path 'InterestPercent'
    )t1,
    XMLTable('/Party[@id=$roid]' passing vAltcnt, t1.roid as "roid"
    COLUMNS
    vAltCntcity VARCHAR2(20) path 'City',
    Partysyskey VARCHAR2(100) path 'PartySysKey',
    vAltCntZip VARCHAR2(20) path 'Address/Zip',
    vAltCntGovtID VARCHAR2(20) path 'GovtID',
    vAltCntTelno VARCHAR2(20) path 'Phone[PhoneTypeCode/@tc=2]/DialNumber',
    vAltCntemailaddr VARCHAR2(200) path 'EMailAddress/AddrLine',
    vAltCntstats varchar2(20) path 'Client/ClientStatus/@tc',
    vAltCntAdd1 varchar2(1000) path 'Address/Line1',
    vAltCntAdd2 varchar2(1000) path 'Address/Line2',
    vAltCntAdd3 varchar2(1000) path 'Address/Line3',
    AltCntstate varchar2(100) path 'Address/AddressState',
    AltCntcntry varchar2(100) path 'Address/AddressCountry',
    vAltCntBRTH_DT date path 'Person/BirthDate',
    vAltCntGender char(1) path 'Person/Gender/@tc',
    vAltCntFaxno varchar2(100) path 'Phone[PhoneTypeCode/@tc=19]/DialNumber',
    vAltCnturladdr varchar2(100) path 'URL/URLAddr',
    AltCntorgFST_NM varchar2(100) path 'Person/FirstName',
    AltCntorgLST_NM varchar2(100) path 'Person/LastName',
    AltCntorgMID_NM varchar2(100) path 'Person/MiddleName',
    AltCntorgPFX_NM varchar2(100) path 'Person/Prefix',
    AltCntorgSUFX_NM varchar2(100) path 'Person/Suffix',
    AltCntpartytypecode varchar2(10) path 'PartyTypeCode/@tc',
    vAltCntdatarep varchar2(100) path '@DataRep'
    ) t
    )
    LOOP
    ------------------------------------------------------------------


    IF b.vAltCntBRTH_DT IS NOT NULL THEN
    dAltCntBRTH_DT:=to_date(b.vAltCntBRTH_DT,'yyyy-mm-dd');
    END IF;

    IF b.vAltCntdatarep != 'Removed' OR b.vAltCntdatarep IS NULL THEN
    BEGIN
    --------------Starting of CHBM_PERSON Table---------
    IF b.vAltCntstats IS NOT NULL THEN
    BEGIN
    SELECT code_val_cd
    INTO vAltCntpsnstats
    FROM chbm_code_reference
    WHERE tbl_nm='CHBM_PERSON'
    AND col_nm='STAT_CD'
    AND acord_cd =b.vAltCntstats;
    EXCEPTION
    WHEN OTHERS THEN
    ncode :=5;
    nErrcode :=2001;
    vStatus :='FAILURE';
    vStatusinfo :='RESULTINFO_DATA ';
    vInfodesc :='Person status details are not available in code reference';
    Raise_application_error(-20201,'Person status details are not available in code reference');
    END;
    END IF;

    BEGIN
    SELECT extractvalue(value(t),'/OLifE/Party[@id=/OLifE/Relation[RelationRoleCode/@tc=150][Sequence=2]/b.ROID][PartyTypeCode/@tc=1]/Phone[PhoneTypeCode/@tc=2]/DialNumber')
    INTO vAltCntDialNumberchk
    FROM TABLE (XMLSEQUENCE (EXTRACT (xData,'/TXLife/TXLifeRequest/OLifE'))) t
    WHERE existsnode(value(t),'/OLifE/Party[@id=/OLifE/Relation[RelationRoleCode/@tc=150][Sequence=2]/b.ROID][PartyTypeCode/@tc=1]/Phone[PhoneTypeCode/@tc=2]/DialNumber') =1;
    EXCEPTION
    WHEN NO_DATA_FOUND THEN
    vAltCntDialNumberchkflag:='Y';
    END;

    BEGIN
    SELECT extractvalue(value(t),'/OLifE/Party[@id=/OLifE/Relation[RelationRoleCode/@tc=150][Sequence=2]/b.ROID][PartyTypeCode/@tc=1]/Phone[PhoneTypeCode/@tc=19]/DialNumber')
    INTO vAltCntFaxnochk
    FROM TABLE (XMLSEQUENCE (EXTRACT (xData,'/TXLife/TXLifeRequest/OLifE'))) t
    WHERE existsnode(value(t),'/OLifE/Party[@id=/OLifE/Relation[RelationRoleCode/@tc=150][Sequence=2]/b.ROID][PartyTypeCode/@tc=1]/Phone[PhoneTypeCode/@tc=19]/DialNumber') =1;
    EXCEPTION
    WHEN NO_DATA_FOUND THEN
    vAltCntFaxnochkflag:='Y';
    END;

    BEGIN
    SELECT extractvalue(value(t),'/OLifE/Party[@id=/OLifE/Relation[RelationRoleCode/@tc=150][Sequence=2]/b.ROID][PartyTypeCode/@tc=1]/Person/FirstName')
    INTO vAltCntFirstnamechk
    FROM TABLE (XMLSEQUENCE (EXTRACT (xData,'/TXLife/TXLifeRequest/OLifE'))) t
    WHERE existsnode(value(t),'/OLifE/Party[@id=/OLifE/Relation[RelationRoleCode/@tc=150][Sequence=2]/b.ROID][PartyTypeCode/@tc=1]/Person/FirstName') =1;
    EXCEPTION
    WHEN NO_DATA_FOUND THEN
    vAltCntFirstnamechkflag:='Y';
    END;

    BEGIN
    SELECT extractvalue(value(t),'/OLifE/Party[@id=/OLifE/Relation[RelationRoleCode/@tc=150][Sequence=2]/b.ROID][PartyTypeCode/@tc=1]/Person/LastName')
    INTO vAltCntLastNamechk
    FROM TABLE (XMLSEQUENCE (EXTRACT (xData,'/TXLife/TXLifeRequest/OLifE'))) t
    WHERE existsnode(value(t),'/OLifE/Party[@id=/OLifE/Relation[RelationRoleCode/@tc=150][Sequence=2]/b.ROID][PartyTypeCode/@tc=1]/Person/LastName') =1;
    EXCEPTION
    WHEN NO_DATA_FOUND THEN
    vAltCntLastNamechkflag:='Y';
    END;

    BEGIN
    SELECT extractvalue(value(t),'/OLifE/Party[@id=/OLifE/Relation[RelationRoleCode/@tc=150][Sequence=2]/b.ROID][PartyTypeCode/@tc=1]/EMailAddress/AddrLine')
    INTO vAltCntEMailAddressPchk
    FROM TABLE (XMLSEQUENCE (EXTRACT (xData,'/TXLife/TXLifeRequest/OLifE'))) t
    WHERE existsnode(value(t),'/OLifE/Party[@id=/OLifE/Relation[RelationRoleCode/@tc=150][Sequence=2]/b.ROID][PartyTypeCode/@tc=1]/EMailAddress/AddrLine') =1;
    EXCEPTION
    WHEN NO_DATA_FOUND THEN
    vAltCntEMailAddressPchkflag:='Y';
    END;

    BEGIN
    SELECT extractvalue(value(t),'/OLifE/Party[@id=/OLifE/Relation[RelationRoleCode/@tc=150][Sequence=2]/b.ROID][PartyTypeCode/@tc=1]/GovtID')
    INTO vAltCntTaxidPchk
    FROM TABLE (XMLSEQUENCE (EXTRACT (xData,'/TXLife/TXLifeRequest/OLifE'))) t
    WHERE existsnode(value(t),'/OLifE/Party[@id=/OLifE/Relation[RelationRoleCode/@tc=150][Sequence=2]/b.ROID][PartyTypeCode/@tc=1]/GovtID') =1;
    EXCEPTION
    WHEN NO_DATA_FOUND THEN
    vAltCntTaxidPchkflag:='Y';
    END;


    IF b.Partysyskey IS NOT NULL THEN
    nAltCntpsnidseq:=b.Partysyskey;
    vAltCntpsnupdatequery:=vAltCntpsnupdatequery||'UPDATE CHBM_PERSON SET';
    IF dAltCntBRTH_DT IS NOT NULL THEN
    cAltCntpsnUpdateflag:='Y';
    vAltCntpsnupdatequery:=vAltCntpsnupdatequery||' brth_dt ='''||dAltCntBRTH_DT||''''||',';
    END IF;

    IF b.vAltCntGender IS NOT NULL THEN
    cAltCntpsnUpdateflag:='Y';
    vAltCntpsnupdatequery:=vAltCntpsnupdatequery||' GEND_CD ='''||b.vAltCntGender||''''||',';
    END IF;

    IF b.vAltCntGovtID IS NOT NULL THEN
    cAltCntpsnUpdateflag:='Y';
    vAltCntpsnupdatequery:=vAltCntpsnupdatequery||' TAX_ID ='''||b.vAltCntGovtID||''''||',';
    ELSIF vAltCntTaxidPchkflag='N' AND vAltCntTaxidPchk IS NULL THEN
    cAltCntpsnUpdateflag:='Y';
    vAltCntpsnupdatequery:=vAltCntpsnupdatequery||' TAX_ID ='''||NULL||''''||',';
    END IF;

    IF b.vAltCntTelno IS NOT NULL THEN
    cAltCntpsnUpdateflag:='Y';
    vAltCntpsnupdatequery:=vAltCntpsnupdatequery||' TEL_NO ='''||b.vAltCntTelno||''''||',';
    ELSIF vAltCntDialNumberchkflag='N' AND vAltCntDialNumberchk IS NULL THEN
    cAltCntpsnUpdateflag:='Y';
    vAltCntpsnupdatequery:=vAltCntpsnupdatequery||' TEL_NO ='''||NULL||''''||',';
    END IF;

    IF b.vAltCntemailaddr IS NOT NULL THEN
    cAltCntpsnUpdateflag:='Y';
    vAltCntpsnupdatequery:=vAltCntpsnupdatequery||' EMAIL_ADR ='''||b.vAltCntemailaddr||''''||',';
    ELSIF vAltCntEMailAddressPchkflag='N' AND vAltCntEMailAddressPchk IS NULL THEN
    cAltCntpsnUpdateflag:='Y';
    vAltCntpsnupdatequery:=vAltCntpsnupdatequery||' EMAIL_ADR ='''||NULL||''''||',';
    END IF;

    IF b.vAltCntFaxno IS NOT NULL THEN
    cAltCntpsnUpdateflag:='Y';
    vAltCntpsnupdatequery:=vAltCntpsnupdatequery||' FAX_NO ='''||b.vAltCntFaxno||''''||',';
    ELSIF vAltCntFaxnochkflag='N' AND vAltCntFaxnochk IS NULL THEN
    cAltCntpsnUpdateflag:='Y';
    vAltCntpsnupdatequery:=vAltCntpsnupdatequery||' FAX_NO ='''||NULL||''''||',';
    END IF;

    IF vAltCntpsnstats IS NOT NULL THEN
    cAltCntpsnUpdateflag:='Y';
    vAltCntpsnupdatequery:=vAltCntpsnupdatequery||' STAT_CD ='''||vAltCntpsnstats||''''||',';
    END IF;

    IF b.AltCntorgLST_NM IS NOT NULL THEN
    cAltCntpsnUpdateflag:='Y';
    vAltCntpsnupdatequery:=vAltCntpsnupdatequery||' LST_NM ='''||b.AltCntorgLST_NM||''''||',';
    ELSIF vAltCntLastNamechkflag='N' AND vAltCntLastNamechk IS NULL THEN
    cAltCntpsnUpdateflag:='Y';
    vAltCntpsnupdatequery:=vAltCntpsnupdatequery||' LST_NM ='''||NULL||''''||',';
    END IF;

    IF b.AltCntorgFST_NM IS NOT NULL THEN
    cAltCntpsnUpdateflag:='Y';
    vAltCntpsnupdatequery:=vAltCntpsnupdatequery||' FST_NM ='''||b.AltCntorgFST_NM||''''||',';
    ELSIF vAltCntFirstnamechkflag='N' AND vAltCntFirstnamechk IS NULL THEN
    cAltCntpsnUpdateflag:='Y';
    vAltCntpsnupdatequery:=vAltCntpsnupdatequery||' FST_NM ='''||NULL||''''||',';
    END IF;

    IF b.AltCntorgMID_NM IS NOT NULL THEN
    cAltCntpsnUpdateflag:='Y';
    vAltCntpsnupdatequery:=vAltCntpsnupdatequery||' MID_NM ='''||b.AltCntorgMID_NM||''''||',';
    END IF;

    IF b.AltCntorgPFX_NM IS NOT NULL THEN
    cAltCntpsnUpdateflag:='Y';
    vAltCntpsnupdatequery:=vAltCntpsnupdatequery||' PFX_NM ='''||b.AltCntorgPFX_NM||''''||',';
    END IF;

    IF b.AltCntorgSUFX_NM IS NOT NULL THEN
    cAltCntpsnUpdateflag:='Y';
    vAltCntpsnupdatequery:=vAltCntpsnupdatequery||' SUFX_NM ='''||b.AltCntorgSUFX_NM||''''||',';
    END IF;

    IF b.vAltCnturladdr IS NOT NULL THEN
    cAltCntpsnUpdateflag:='Y';
    vAltCntpsnupdatequery:=vAltCntpsnupdatequery||' WEB_SITE_ID ='''||b.vAltCnturladdr||''''||',';
    END IF;

    IF dopeneddate IS NOT NULL THEN
    cAltCntpsnUpdateflag:='Y';
    vAltCntpsnupdatequery:=vAltCntpsnupdatequery||' LST_UPDT_DT ='''||dopeneddate||''''||',';
    END IF;

    IF usercreated IS NOT NULL THEN
    cAltCntpsnUpdateflag:='Y';
    vAltCntpsnupdatequery:=vAltCntpsnupdatequery||' LST_UPDT_BY_USER_ID ='''||usercreated||''''||',';
    END IF;
    vAltCntpsnupdatequery := SUBSTR(vAltCntpsnupdatequery,1,instr(vAltCntpsnupdatequery,',',-1,1)-1);
    vAltCntpsnupdatequery:=vAltCntpsnupdatequery||' WHERE psn_id='''||nAltCntpsnidseq||'''';

    IF cAltCntpsnUpdateflag='Y' THEN
    EXECUTE IMMEDIATE vAltCntpsnupdatequery;
    vAltCntpsnupdatequery := NULL;
    nAltcnt4:=Sql%rowcount;
    END IF;
    END IF;
    END LOOP;
    END IF;
    END;

    Regards,
    Jyothirmai
  • 3. Re: xml parsing issue with the existsnode function
    odie_63 Guru
    Currently Being Moderated
    For this above code its not going to the exception.we are using this select statement to check whether that node existed or not.
    You don't need all that stuff.
    Why access the same XML over and over again?

    You can check whether a node exists or not directly in the FOR LOOP query.
    For example, the _Flag columns below will return "true" or "false" if the corresponding node exists or not. You can then test this value directly instead of parsing the whole document again :
    SELECT t1.ROID ROID
         , t.AltCntorgFST_NM
         , t.AltCntorgFST_NM_Flag
         , t.AltCntorgLST_NM
         , t.AltCntorgLST_NM_Flag 
    FROM XMLTable( 
         '/TXLife/TXLifeRequest/OLifE/Relation[RelationRoleCode/@tc=150][Sequence=2]' 
         passing xData
         COLUMNS OOID varchar2(50) path '@OriginatingObjectID'
               , ROID varchar2(50) path '@RelatedObjectID'
         ) t1
       , XMLTable(
         '/TXLife/TXLifeRequest/OLifE/Party[@id=$roid]' 
         passing xData
              , t1.roid as "roid"
         COLUMNS
           AltCntorgFST_NM        varchar2(100) path 'Person/FirstName'
         , AltCntorgFST_NM_Flag   varchar2(5)   path 'exists(Person/FirstName)'  
         , AltCntorgLST_NM        varchar2(100) path 'Person/LastName'
         , AltCntorgLST_NM_Flag   varchar2(5)   path 'exists(Person/LastName)'
         ) t
    ;
    Or, if you don't want to do that for some reasons, then at least simplify subsequent checks by using the ROID :
    if existsnode(
         xData
       , '/TXLife/TXLifeRequest/OLifE/Party[@id="'||b.roid||'"][PartyTypeCode/@tc=1]/Person/FirstName'
       ) = 1
    then 
      ... 
  • 4. Re: xml parsing issue with the existsnode function
    936056 Newbie
    Currently Being Moderated
    Hi Odie,

    Thanks for your help.
    My issue got solved.

    Regards,
    Jyothirmai

Legend

  • Correct Answers - 10 points
  • Helpful Answers - 5 points