Oracle XML: Omitir no existe nodo

Tengo un problema para proceder con los datos xml para insertar en la tabla de Oracle, aquí está mi xml:

<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>

El resultado que esperaba es:

LastName | Number | code    | address
gordon   | 100    | 213     |Jl. jalan pelan-pelan ke Bekasi, Indonesia
mark     | Null   | Null    |Jl. jalan cepet-cepet ke Jakarta, Indonesia

Al acceder al nodo no existe, no aparecerán los datos de 1 fila (como los datos de la segunda fila).

Actualización: aquí está mi código actual

 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;

Respuestas a la pregunta(2)

Su respuesta a la pregunta