sql >> データベース >  >> RDS >> Oracle

XML Oracle:複数の子ノードの抽出

    XMLTable()を使用すると、目的の結果を得ることができます。 機能:

    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)
    

    結果:SQLFiddleデモ

    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 
    

    詳細 XMLTable()について 機能。

    :11.2.0.2より前のOracleリリースを使用すると、ORA-1780 errorが発生する可能性があります。 (バグ8545377)cursor_sharingの場合の特定のタイプのXMLクエリ パラメータがFORCEに設定されている またはSIMILAR (11.2から非推奨)。 cursor_sharingの設定 EXACTへのパラメータ (デフォルト値)、問題を解決します。




    1. nullではない値をデータベースから取得する方法

    2. ループ内のMySQLクエリとSQL結合の使用

    3. Oracle SQLでグループ化する方法。ただし、後日グループが繰り返される場合は複数の行があります

    4. psql:致命的:データベース<ユーザー>は存在しません