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

mendapat urutan multi-item

Anda memiliki beberapa kontainer per pengiriman, dan Anda memfilter berdasarkan LRN setelah mengekstraknya dari XML mentah; jadi Anda perlu menggunakan objek XMLTable bersarang. Yang pertama mendapatkan data dari deklarasi dan mengekstrak kiriman sebagai sub-XMLType. Itu kemudian diteruskan ke XMLTable kedua yang mengekstrak informasi kontainer.

SELECT x1.lrn, x1.username, x2.containerNumber
FROM dmsimport_decl d
CROSS JOIN XMLTable(
  XMLNAMESPACES(DEFAULT 'http://www.xxxx.invalid/xxxx/xxx/schema/xxx',
    'http://www.xxxx.invalid/xxx/schema/common' AS "c",
    'http://www.xxxx.invalid/xxxx/xxx/schema/xxx' AS "d"),
  '/d:declaration'
  PASSING d.object_value
  COLUMNS
    lrn VARCHAR2(35 CHAR)
      PATH 'c:declarationHeader/c:localReferenceNumber/text()',
    username CHAR(25)
      PATH 'c:declarationHeader/c:username/text()',
    consignment XMLType
      PATH 'd:goodsShipments/d:consignment'
) x1
CROSS JOIN XMLTable(
  XMLNAMESPACES(DEFAULT 'http://www.xxxx.invalid/xxxx/xxx/schema/xxx',
    'http://www.xxxx.invalid/xxx/schema/common' AS "c",
    'http://www.xxxx.invalid/xxxx/xxx/schema/xxx' AS "d"),
  '//d:transportEquipment'
  PASSING x1.consignment
  COLUMNS
    containerNumber VARCHAR2(35 CHAR)
      PATH 'd:id/text()'
) x2
WHERE x1.lrn = 'NLDMS111111150010950';

Dengan sampel XML Anda (yang diperbarui), yang menghasilkan:

LRN                                 USERNAME                  CONTAINERNUMBER                   
----------------------------------- ------------------------- -----------------------------------
NLDMS111111150010950                testSC testSC             abcd                               
NLDMS111111150010950                testSC testSC             bcde                               
NLDMS111111150010950                testSC testSC             cdef                               
NLDMS111111150010950                testSC testSC             defg                               
NLDMS111111150010950                testSC testSC             efgh                               

Semoga itu yang ingin Anda lihat.

Demo Fiddle SQL Cepat .

Anda juga dapat menggunakan XPath yang lebih rumit untuk menyimpannya dalam satu XMLTable, tetapi menurut saya ini lebih jelas.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. bagaimana cara menyimpan tanggal DAN waktu dengan JPA di Oracle?

  2. Aplikasi VB6 koneksi oracle 12 64bit

  3. Cara memilih nilai tertentu dari XML menggunakan Oracle Xquery

  4. Bagaimana menjalankan prosedur tersimpan dalam sesi yang berbeda dalam waktu yang sama di pl/sql

  5. Cegah Pemicu Sisipkan