sql >> Database >  >> RDS >> Oracle

XML Oracle :Extractie van meerdere onderliggende knooppunten

U kunt het gewenste resultaat bereiken door XMLTable() . te gebruiken functie:

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)

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

Meer informatie over XMLTable() functie.

Opmerking :Als u met Oracle-releases vóór 11.2.0.2 werkt, kunt u ORA-1780 error tegenkomen (bug 8545377) op bepaalde typen XML-query's wanneer cursor_sharing parameter is ingesteld op FORCE of SIMILAR (verouderd vanaf 11.2). cursor_sharing instellen parameter naar EXACT (standaardwaarde), lost het probleem op.




  1. postgresql-fout:instructie annuleren vanwege gebruikersverzoek

  2. MySQL hell... kan geen verbinding maken met database /tmp/mysql.sock

  3. XML doorgeven als parameter aan opgeslagen procedure in Oracle

  4. MySQLdb en Python ImportError