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

Oracleクエリを使用してxmlデータを抽出します

    データを段階的に抽出します:

    SELECT xobjects.id, xobjects.name, xrows.index_id,
      xrows.provider_id_description, xrows.provider_id
    FROM XMLTABLE(
        '/AuxiliaryType/AuxiliaryObject'
        PASSING xmltype(
                   '<AuxiliaryType>
                     <AuxiliaryObject id="1" NAME="Provider_P107">
                             <Row>
                                  <Index_id>1</Index_id>
                                  <Provider_ID_description>GNRCN</Provider_ID_description>
                                  <Provider_ID>GNRCN</Provider_ID>
                             </Row>
    
                              <Row>
                                  <Index_id>2</Index_id>
                                  <Provider_ID_description>EGUT12</Provider_ID_description>
                                  <Provider_ID>EGUT12 </Provider_ID>
                             </Row>
                     </AuxiliaryObject>
                     <AuxiliaryObject id="2" NAME="Provider_P108">
                             <Row>
                                  <Index_id>1</Index_id>
                                  <Provider_ID_description>GNRCN</Provider_ID_description>
                                  <Provider_ID>GNRCN</Provider_ID>
                             </Row>
    
                              <Row>
                                  <Index_id>2</Index_id>
                                  <Provider_ID_description>EGUT</Provider_ID_description>
                                  <Provider_ID>EGUT </Provider_ID>
                             </Row>
                     </AuxiliaryObject>
    
                    </AuxiliaryType>'
        )
        COLUMNS 
        name VARCHAR2(30) PATH '@NAME',
        id VARCHAR2(10) PATH '@id',
        xrows XMLTYPE PATH 'Row') xobjects,
      XMLTABLE(
        '/Row'
        PASSING xobjects.xrows
        COLUMNS
        index_id VARCHAR2(10) PATH 'Index_id', 
        provider_id_description VARCHAR2(30) PATH 'Provider_ID_description',
        provider_id  VARCHAR2(30) PATH 'Provider_ID') xrows;
    

    XMLTable xobjectsAuxiliaryObjectが含まれています AuxiliaryType内のインスタンス 、元のXMLテキストから。属性nameがあります およびid 、およびネストされた行を含むサブXMLType。 2番目のXMLTable、xrows 、それを展開して、要素を抽出できるようにします。 XMLタイプの結合と受け渡しにより、必要な出力を提供する階層が作成されます。

    ID         NAME                           INDEX_ID   PROVIDER_ID_DESCRIPTION        PROVIDER_ID                  
    ---------- ------------------------------ ---------- ------------------------------ ------------------------------
    1          Provider_P107                  1          GNRCN                          GNRCN                          
    1          Provider_P107                  2          EGUT12                         EGUT12                         
    2          Provider_P108                  1          GNRCN                          GNRCN                          
    2          Provider_P108                  2          EGUT                           EGUT                           
    

    これは、11.2.0.3データベースに対するSQL Developer、および SQLFiddle> 。

    この回答の以前のCTEベースのバージョンもSQLDeveloperで機能しましたが、 SQL Fiddle ORA-600エラーが発生しました。質問で発生した問題に加えて、SQL Fiddleがパッチが適用されていないバージョンまたは少なくとも異なるパッチが適用されたバージョンの11gR2にあり、XML処理にバグがあることを示唆しています。




    1. シンプルなPHP投票システム

    2. PostGISの動作

    3. SQLServerモニタリングの総所有コストを計算する

    4. PDOは、(特定のテーブル内の)データの行の削除を拒否します