Oracle XML: Nicht vorhandener Knoten überspringen
Ich habe ein Problem damit, XML-Daten in die Oracle-Tabelle einzufügen. Hier ist meine XML-Datei:
<begin>
<entry>
<lastname>gordon</lastname>
<NumberList>
<number>100</number>
<codelist>
<code>213</code>
<codelist>
<NumberList>
<address>
<addresslist>Jl. jalan pelan-pelan ke Bekasi, Indonesia</addresslist>
</address>
</entry>
<entry>
<lastname>mark</lastname>
<address>
<addresslist>Jl. jalan cepet-cepet ke Jakarta, Indonesia</addresslist>
</address>
</entry>
</begin>
Was ich erwartet habe ist:
LastName | Number | code | address
gordon | 100 | 213 |Jl. jalan pelan-pelan ke Bekasi, Indonesia
mark | Null | Null |Jl. jalan cepet-cepet ke Jakarta, Indonesia
Beim Zugriff auf den nicht vorhandenen Knoten werden keine Daten für eine Zeile angezeigt (wie bei den Daten für die zweite Zeile).
Update: hier ist mein aktueller Code
DECLARE
X XMLTYPE := XMLTYPE('
<begin>
<entry>
<lastname>gordon</lastname>
<NumberList>
<number>100</number>
<codelist>
<code>213</code>
</codelist>
</NumberList>
<address>
<addresslist>Jl. jalan pelan-pelan ke Bekasi, Indonesia</addresslist>
</address>
</entry>
<entry>
<lastname>mark</lastname>
<address>
<addresslist>Jl. jalan cepet-cepet ke Jakarta, Indonesia</addresslist>
</address>
</entry>
</begin>');
BEGIN
FOR R IN (SELECT EXTRACTVALUE(VALUE(P), '/entry/lastname/text()') AS lastname,
EXTRACTVALUE(VALUE(P), '/entry/address/addresslist/text()') AS address,
EXTRACT(VALUE(P), '/entry/NumberList') AS NumberList
FROM TABLE(XMLSEQUENCE(EXTRACT(X, '//begin/entry'))) P)
LOOP
FOR R1 IN (SELECT EXTRACTVALUE(VALUE(T1), 'NumberList/number/text()') AS numbers,
EXTRACTVALUE(VALUE(T1), 'NumberList/codelist/code/text()') AS code
FROM TABLE(XMLSEQUENCE(EXTRACT(R.NumberList, '/NumberList'))) T1)
LOOP
DBMS_OUTPUT.PUT_LINE(r.lastname||' | '||R1.numbers||' | '||R1.code||' | '||r.address);
END LOOP;
END LOOP;
END;