XML Oracle : Multiple Child Node extract

后端 未结 1 1439
陌清茗
陌清茗 2020-12-10 16:31

I have an xml code :


    
        gordon
        
            100         


        
相关标签:
1条回答
  • 2020-12-10 17:16

    You can achieve desired result by using XMLTable() function:

    select q.Lastname
         , q.Numberid
         , s.codeid
         , w.LoginId
         , q.address
      from t1 t
      left join xmltable('/begin/entry'
                          passing t.xml_col 
                          columns LastName   varchar2(21)  path 'lastname',
                                  NumberId   number        path 'NumberList/number',
                                  Address    varchar2(201) path 'address/addresslist',
                                  CodeList   XmlType       Path 'NumberList/codelist/code',
                                  Logins     XmlType       Path 'NumberList/login/user'
                          ) q
        on (1=1) 
      left join xmltable('/code'
                          passing q.CodeList
                          columns CodeId number path '.') s
        on (1=1)
      left join   xmltable('/user'
                            passing q.Logins
                            columns LoginId varchar2(11) path '.') w
        on (1=1)
    

    Result: SQLFiddle Demo

    Lastname Numberid Codeid Loginid Address 
    ---------------------------------------------------------------------------
    gordon   100      213    user1   Jl. jalan pelan-pelan ke Bekasi, Indonesia 
    gordon   100      213    user2   Jl. jalan pelan-pelan ke Bekasi, Indonesia 
    gordon   100      214    user1   Jl. jalan pelan-pelan ke Bekasi, Indonesia 
    gordon   100      214    user2   Jl. jalan pelan-pelan ke Bekasi, Indonesia 
    mark     null     null   null    Jl. jalan cepet-cepet ke Jakarta, Indonesia 
    

    Find out more about XMLTable() function.

    Note: Working with Oracle releases prior to 11.2.0.2, you can encounter ORA-1780 error(bug 8545377) on certain types of XML queries when cursor_sharing parameter is set to FORCE or SIMILAR(deprecated starting from 11.2). Setting cursor_sharing parameter to EXACT(default value), will solve the problem.

    0 讨论(0)
提交回复
热议问题