Oracle XML : Skip Not exist Node

后端 未结 2 2032
[愿得一人]
[愿得一人] 2021-01-17 03:40

I have a problem proceed xml data to insert in oracle table, here is my xml :


    
        gordon         


        
2条回答
  •  别那么骄傲
    2021-01-17 03:59

    Here is the target table:

    CREATE TABLE my_test
         (
              LastName varchar2(20),
              phone   NUMBER,
              code    varchar2(20),
              address VARCHAR2(100)
         );
    

    The code to populate it:

    SET serveroutput ON
    DECLARE
    l_xml xmltype;
    l_val VARCHAR2(1000) := '
        
            gordon
            
                100
                
                     213
                
            
            
    jl. jalan pelan-pelan ke bekasi, indonesia
    mark
    jl. jalan cepet-cepet ke jakarta, indonesia
    '; l_lastname varchar2(50); l_phone number; l_code number; l_address varchar2(200); BEGIN l_xml := xmltype(l_val); FOR x IN (SELECT VALUE(p) col_val FROM TABLE(XMLSEQUENCE(EXTRACT(l_xml, '/begin/entry'))) p ) loop IF x.col_val.existsnode('/entry/lastname/text()') > 0 THEN l_lastname := x.col_val.extract('/entry/lastname/text()').getstringval(); END IF; if x.col_val.existsnode('/entry/numberlist/number/text()') > 0 then l_phone := x.col_val.extract('/entry/numberlist/number/text()').getstringval(); end if; if x.col_val.existsnode('/entry/numberlist/codelist/code/text()') > 0 then l_code := x.col_val.extract('/entry/numberlist/codelist/code/text()').getstringval(); end if; IF x.col_val.existsnode('/entry/address/addresslist/text()') > 0 THEN l_address := x.col_val.extract('/entry/address/addresslist/text()').getstringval(); end if; INSERT INTO my_test ( lastname, phone, code, address ) VALUES ( l_lastname, l_phone, l_code, l_address ); l_lastname := null; l_phone := null; l_code := null; l_address := null; end loop; commit; end;

提交回复
热议问题