Oracle
 sql >> Datenbank >  >> RDS >> Oracle

XML Oracle:Extrakt aus mehreren untergeordneten Knoten

Sie können das gewünschte Ergebnis erzielen, indem Sie XMLTable() verwenden Funktion:

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)

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

Weitere Informationen über XMLTable() Funktion.

Hinweis :Beim Arbeiten mit Oracle-Releases vor 11.2.0.2 kann der ORA-1780 error auftreten (Bug 8545377) bei bestimmten Arten von XML-Abfragen beim cursor_sharing Parameter auf FORCE gesetzt ist oder SIMILAR (veraltet ab 11.2). Einstellen von cursor_sharing Parameter auf EXACT (Standardwert), löst das Problem.