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

ओरेकल में एक्सएमएल पथ के रूप में इनपुट पास करके परिणाम खींचने में असमर्थ

मान लें कि आप एक्सएमएल के भीतर एक आईडी पर फ़िल्टर करने का प्रयास कर रहे हैं, आपको सिंटैक्स के साथ कोई समस्या है, आपने रूट नोड को गतिविधि के बजाय गतिविधि आईडी के रूप में आपूर्ति की है, आप आईडी नोड पर नहीं जा रहे हैं, आप दुरुपयोग कर रहे हैं contains - और वह शायद वैसे भी नहीं है जो आप चाहते हैं; और आप नाम स्थान को अनदेखा कर रहे हैं।

यह केवल उन पंक्तियों को खोजेगा जहाँ XML की एक विशिष्ट आईडी है:

SELECT * from activity
where ExtractValue(xml,
  '/Activity/Agent/Territory/ns2:SalesTeamId/ns2:ID/text()',
  'xmlns="urn:astrazeneca:na:Activity:domain:3" xmlns:ns2="urn:astrazeneca:na:CommonTypes:domain:2"'
  ) = 10669;

लेकिन ExtractValue लंबे समय से बहिष्कृत कर दिया गया है, इसलिए आपको इसके बजाय XMLQuery का उपयोग करना चाहिए। या इस संदर्भ में XMLExists का उपयोग करने के लिए शायद अधिक समझदारी होगी, उस मूल्य के साथ जिसे आप एम्बेड करना चाहते हैं:

SELECT * from activity
where XMLExists('
    declare default element namespace "urn:astrazeneca:na:Activity:domain:3";
    declare namespace ns2="urn:astrazeneca:na:CommonTypes:domain:2";
    /Activity/Agent/Territory/ns2:SalesTeamId/ns2:ID[text()=10669]
  '
  passing xml
);

या शायद अधिक उपयोगी रूप से एक तर्क के रूप में आपूर्ति की गई:

SELECT * from activity
where XMLExists('
    declare default element namespace "urn:astrazeneca:na:Activity:domain:3";
    declare namespace ns2="urn:astrazeneca:na:CommonTypes:domain:2";
    /Activity/Agent/Territory/ns2:SalesTeamId/ns2:ID[text()=$id]
  '
  passing xml, 10669 as "id"
);

db<>fiddle

यदि आप मिलान वाली पंक्तियों में XML से विशिष्ट डेटा निकालना चाहते हैं तो XMLQuery या XMLTable देखें - लेकिन यह एक अलग मुद्दा है।




  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. तालिका (ओरेकल एसक्यूएल) में स्ट्रिंग (एक कॉलम) के रूप में एकाधिक पंक्तियों को वापस करने वाली सबक्वायरी का चयन करें

  3. लिनक्स में jdk 1.7 स्थापित करते समय त्रुटियाँ

  4. Oracle और Microsoft स्कीमा में क्या अंतर है?

  5. दिनांक मान के साथ IN पैरामीटर प्रक्रिया निष्पादित करते समय मान्य माह नहीं है