Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Ekstrak data xml menggunakan kueri Oracle

Saya akan mengekstrak data secara bertahap:

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 xobjects berisi masing-masing AuxiliaryObject instance dalam AuxiliaryType , dari teks XML asli Anda. Ini memiliki atribut name dan id , ditambah sub-XMLType yang berisi baris bersarang. XMLTable kedua, xrows , memperluas itu sehingga elemen dapat diekstraksi. Penggabungan dan penerusan tipe XML membuat hierarki yang memberikan output yang Anda inginkan:

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                           

Ini berfungsi di Pengembang SQL terhadap basis data 11.2.0.3, dan di SQL Fiddle .

Versi berbasis CTE sebelumnya dari jawaban ini juga berfungsi di Pengembang SQL tetapi SQL Fiddle mendapat kesalahan ORA-600; bahwa bersama dengan masalah yang Anda miliki dalam pertanyaan menunjukkan mungkin SQL Fiddle ada pada versi 11gR2 yang belum ditambal, atau setidaknya ditambal berbeda, yang memiliki bug dalam penanganan XML.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mengubah format tanggal

  2. Apakah ada cara untuk mendapatkan informasi tentang sesi saat ini dari gv$session di Oracle?

  3. Alternatif untuk LIMIT dan OFFSET untuk paging di Oracle

  4. Tidak dapat memperbarui model data Entitas dari database karena kesalahan TNS

  5. Bagaimana Saya Dapat Mempertahankan Pengidentifikasi Unik Di Antara Beberapa Tabel Database?