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

Dari XML ke daftar jalur di Oracle 12c

SQL Fiddle

Pengaturan Skema Oracle 11g R2 :

CREATE TABLE xml_data ( xml ) AS
  SELECT XMLTYPE('
    <ALFA>
      <BETA>0123</BETA> 
      <GAMMA attribute1="value1">2345</GAMMA> 
      <DELTA attribute2="value2"> 
         <EPSILON attribute3="value3" attribute4="value4">3</EPSILON> 
      </DELTA> 
    </ALFA> 
  ')
  FROM DUAL;   

Kueri 1 :

select xpath, text
from   xml_data d
       CROSS JOIN
       XMLTable( 
         'for $i in $doc/descendant-or-self::*
            let $path := $i/string-join(ancestor-or-self::*/name(.), ''/'')
            return <data>{attribute path {$path}, attribute value {$i/text()}}</data>' 
         PASSING d.xml AS "doc"
         COLUMNS xpath varchar2(4000) path '/data/@path', 
                 text  varchar2(4000) path '/data/@value'
       )
UNION ALL
select xpath, text
from   xml_data d
       CROSS JOIN
       XMLTable( 
         'for $i in $doc/descendant-or-self::*
            let $path := $i/string-join(ancestor-or-self::*/name(.), ''/'')
            for $j in $i/attribute::*
              return <data>{attribute path { concat( $path, "/@", $j/name(.) ) }, attribute value {$j}}</data>' 
         PASSING d.xml AS "doc"
         COLUMNS xpath varchar2(4000) path '/data/@path', 
                 text  varchar2(4000) path '/data/@value'
       )

Hasil :

|                          XPATH |   TEXT |
|--------------------------------|--------|
|                           ALFA | (null) |
|                      ALFA/BETA |   0123 |
|                     ALFA/GAMMA |   2345 |
|                     ALFA/DELTA | (null) |
|             ALFA/DELTA/EPSILON |      3 |
|         ALFA/GAMMA/@attribute1 | value1 |
|         ALFA/DELTA/@attribute2 | value2 |
| ALFA/DELTA/EPSILON/@attribute3 | value3 |
| ALFA/DELTA/EPSILON/@attribute4 | value4 |



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apakah mungkin untuk melewatkan nama tabel sebagai parameter di Oracle?

  2. Saring catatan yang tidak ada dalam format tanggal oracle ini

  3. TO_DSINTERVAL() Fungsi di Oracle

  4. Memperkenalkan Easysoft Oracle® Driver ke dalam Lingkungan SOA Anda

  5. Hapus ekspresi acak dari string