sql >> Database teknologi >  >> RDS >> Oracle

fik multi-item sekvens

Du har flere containere pr. forsendelse, og du filtrerer baseret på LRN efter at have udtrukket det fra den rå XML; så du skal bruge indlejrede XMLTable-objekter. Den første får data fra deklarationen og udtrækker sendingerne som en under-XMLType. Det sendes derefter til den anden XML-tabel, som uddrager containerinformationen.

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';

Med din (opdaterede) eksempel-XML, der producerer:

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

Forhåbentlig er det det, du vil se.

Quick SQL Fiddle-demo .

Du kan også bruge en mere kompliceret XPath til at holde den i en enkelt XML-tabel, men jeg tror, ​​det er klarere.



  1. pak postgresql-array ud i rækker

  2. Hvordan kan jeg oprette forbindelse til en Oracle-database fra Ant ved hjælp af tnsname?

  3. Bruger du bindevariabler i SQL Plus med mere end én række returneret?

  4. ORA - 00933 forveksling med indre sammenføjning og som