Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

बहु-आइटम अनुक्रम मिला

आपके पास प्रति माल कई कंटेनर हैं, और आप कच्चे एक्सएमएल से निकालने के बाद एलआरएन के आधार पर फ़िल्टर कर रहे हैं; इसलिए आपको नेस्टेड XMLTable ऑब्जेक्ट्स का उपयोग करने की आवश्यकता है। पहला व्यक्ति घोषणा से डेटा प्राप्त करता है और माल को उप-एक्सएमएल टाइप के रूप में निकालता है। इसके बाद इसे दूसरे XMLTable में भेज दिया जाता है जो कंटेनर की जानकारी निकालता है।

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

आपके (अपडेटेड) नमूना एक्सएमएल के साथ, जो उत्पादन करता है:

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

उम्मीद है कि आप यही देखना चाहते हैं।

त्वरित SQL Fiddle डेमो

आप इसे एक एकल XMLTable में रखने के लिए अधिक जटिल XPath का भी उपयोग कर सकते हैं, लेकिन मुझे लगता है कि यह अधिक स्पष्ट है।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. एसक्यूएल लोडर, ट्रिगर संतृप्ति?

  2. इंटरफेस त्रुटि:ओरेकल पर्यावरण संभाल हासिल करने में असमर्थ; ORACLE_HOME सही है और SQL*प्लस कनेक्ट हो जाएगा

  3. आप Oracle डेटाबेस के URL का पता कैसे लगाते हैं?

  4. SQL डेवलपर में डेटा आयात करते समय टाइमस्टैम्प पढ़ना

  5. बाधा उल्लंघन अपवाद ORA-00001