Well, the XML fragment is obviously not well formed so I think you will have problems
a) Storing it as XML and
b) using Oracle XML built in functions to process it
One solution is to store is as a CLOB and use regular string fucntions to parse it. Its a bit clunky and might not scale too well but here goes:-
SQL> create table failedxml(test clob)
2 /
Table created.
1 insert into failedxml(test)
2 values(
3 to_clob
4 (
5 '<Request action="Update">
6 <Personality>
7 <Identity><PersonIdentity><PersonNumber>187347</PersonNumber>
8 </PersonIdentity>
9 </Identity>
10 <JobAssignmentData><JobAssignment><JobAssignmentDetailsData><JobAssignmentD
etails><BaseWageHourly></BaseWageHourly>
11 <DeviceGroupName>NW44</DeviceGroupName>
12 <PayRuleName>RT - 30 Min Auto Ded >39</PayRuleName>
13 </JobAssignmentDetails>
14 </JobAssignmentDetailsData>
15 <PrimaryLaborAccounts><PrimaryLaborAccount><EffectiveDate>15/08/2006</Effec
tiveDate>
16 <LaborAccountName>Food/North West RT/North West Region 4 RT/North West Area
44 RT/Late Shop Ellenbrook/-/-</LaborAccountName>
17 </PrimaryLaborAccount>
18 </PrimaryLaborAccounts>
19 </JobAssignment>
20 </JobAssignmentData>
21 <PersonInformationData><PersonInformation><BadgeAssignments><BadgeAssignmen
t><BadgeNumber>187347</BadgeNumber>
22 <EffectiveDate>16/06/2006</EffectiveDate>
23 </BadgeAssignment>
24 </BadgeAssignments>
25 <CustomDataList><CustomData><CustomDataTypeName>AIS</CustomDataTypeName>
26 <Text></Text>
27 </CustomData>
28 </CustomDataList>
29 <EmploymentStatusList><EmploymentStatus><EffectiveDate>16/06/2006</Effectiv
eDate>
30 <EmploymentStatusName>Active</EmploymentStatusName>
31 </EmploymentStatus>
32 </EmploymentStatusList>
33 <ExpectedHoursList><ExpectedHours><Quantity>25</Quantity>
34 <TimePeriodTypeName>Weekly</TimePeriodTypeName>
35 </ExpectedHours>
36 </ExpectedHoursList>
37 <Identity><PersonIdentity><PersonNumber>187347</PersonNumber>
38 </PersonIdentity>
39 </Identity>
40 <PersonData><Person><AccrualProfileName>Holiday and Lieu Time</AccrualProfi
leName>
41 <BirthDate>03/07/1960</BirthDate>
42 <FingerRequiredFlag>True</FingerRequiredFlag>
43 <FirstName>Tracey</FirstName>
44 <HireDate>16/06/2006</HireDate>
45 <LastName>Howard</LastName>
46 <MiddleInitial></MiddleInitial>
47 <PersonNumber>187347</PersonNumber>
48 </Person>
49 </PersonData>
50 <PersonLicenseTypes><PersonLicenseType><ActiveFlag>TRUE</ActiveFlag>
51 <LicenseTypeName>Workforce_Timekeeper_Employee</LicenseTypeName>
52 </PersonLicenseType>
53 </PersonLicenseTypes>
54 <PostalAddresses><PostalAddress><City></City>
55 <ContactTypeName>5</C
56 ')
57* )
SQL> /
1 row created.
1 select
2 substr(test,instr(test,'<PersonNumber>',1,1)+14,
3 instr(test,'</PersonNumber>',1,1)-instr(test,'<PersonNumber>',1,1) -14)
4* from failedxml
SQL> /
SUBSTR(TEST,INSTR(TEST,'<PERSONNUMBER>',1,1)+14,INSTR(TEST,'</PERSONNUMBER>',1,1
--------------------------------------------------------------------------------
187347
In order to understand recursion, you must first understand recursion.