oracle plsql: how to parse XML and insert into table

前端 未结 3 644
后悔当初
后悔当初 2020-12-02 09:35

How to load a nested xml file into database table ?

 

   
       Tom
                


        
相关标签:
3条回答
  • 2020-12-02 09:55
    select *  
    FROM XMLTABLE('/person/row'  
             PASSING   
                xmltype('
                    <person>
                       <row>
                           <name>Tom</name>
                           <Address>
                               <State>California</State>
                               <City>Los angeles</City>
                           </Address>
                       </row>
                       <row>
                           <name>Jim</name>
                           <Address>
                               <State>California</State>
                               <City>Los angeles</City>
                           </Address>
                       </row>
                    </person>
                ')
             COLUMNS  
                --describe columns and path to them:  
                name  varchar2(20)    PATH './name',  
                state varchar2(20)    PATH './Address/State',  
                city  varchar2(20)    PATH './Address/City'
         ) xmlt  
    ;  
    
    0 讨论(0)
  • 2020-12-02 09:59

    You can load an XML document into an XMLType, then query it, e.g.:

    DECLARE
      x XMLType := XMLType(
        '<?xml version="1.0" ?> 
    <person>
       <row>
           <name>Tom</name>
           <Address>
               <State>California</State>
               <City>Los angeles</City>
           </Address>
       </row>
       <row>
           <name>Jim</name>
           <Address>
               <State>California</State>
               <City>Los angeles</City>
           </Address>
       </row>
    </person>');
    BEGIN
      FOR r IN (
        SELECT ExtractValue(Value(p),'/row/name/text()') as name
              ,ExtractValue(Value(p),'/row/Address/State/text()') as state
              ,ExtractValue(Value(p),'/row/Address/City/text()') as city
        FROM   TABLE(XMLSequence(Extract(x,'/person/row'))) p
        ) LOOP
        -- do whatever you want with r.name, r.state, r.city
      END LOOP;
    END;
    
    0 讨论(0)
  • 2020-12-02 09:59
    CREATE OR REPLACE PROCEDURE ADDEMP
        (xml IN CLOB)
    AS
    BEGIN
        INSERT INTO EMPLOYEE (EMPID,EMPNAME,EMPDETAIL,CREATEDBY,CREATED)
        SELECT 
            ExtractValue(column_value,'/ROOT/EMPID') AS EMPID
           ,ExtractValue(column_value,'/ROOT/EMPNAME') AS EMPNAME
           ,ExtractValue(column_value,'/ROOT/EMPDETAIL') AS EMPDETAIL
           ,ExtractValue(column_value,'/ROOT/CREATEDBY') AS CREATEDBY
           ,ExtractValue(column_value,'/ROOT/CREATEDDATE') AS CREATEDDATE
        FROM   TABLE(XMLSequence( XMLType(xml))) XMLDUMMAY;
    
        COMMIT;
    END;
    
    0 讨论(0)
提交回复
热议问题