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

Oracle SQL क्वेरी का उपयोग करके XML में किसी विशेष नोड नाम और उसके मानों का चयन कैसे करें?

आप अपने CLOB को एक XMLType में परिवर्तित कर सकते हैं, यह मानते हुए कि यह मान्य है, बस इसके साथ:

extractvalue(XMLType(RESPONSE_XML), ...

सुनिश्चित नहीं हैं कि यदि आप इसमें XML संग्रहीत कर रहे हैं तो आपका कॉलम प्रकार XMLType क्यों नहीं है, लेकिन यह पूरी तरह से प्रासंगिक नहीं है।

फिर आप नेमस्पेस को extractvalue() . पर सप्लाई कर सकते हैं :

SELECT extractvalue(XMLType(RESPONSE_XML),
  '//ax2130:id/text()',
  'xmlns:ax2130="http://core.data.soap.CDRator.com/xsd"')
FROM SOAP_MONITORING
where WEB_SERVICE_NAME='RatorWebShopService' and WEB_METHOD_NAME='placeShopOrder';

.. लेकिन आपके पास कई आईडी हैं, इसलिए आपको मिलता है:ORA-19025: EXTRACTVALUE returns value of only one node

और extractvalue बहिष्कृत है, जैसा कि दस्तावेज़ीकरण में बताया गया है

आप XQuery का उपयोग कर सकते हैं इसके बजाय, विशेष रूप से यहाँ एक XMLTable।

मान लें कि आप केवल ax2130:id चाहते हैं ax2147:subscription . के अंदर नेस्टेड मान , आप इस XQuery का उपयोग कर सकते हैं:

SELECT xt.id
FROM SOAP_MONITORING sm
CROSS JOIN XMLTable(XMLNAMESPACES (
      'http://schemas.xmlsoap.org/soap/envelope/' AS "soapenv",
      'http://service.soap.CDRator.com' as "ns",
      'http://core.data.soap.CDRator.com/xsd' as "ax2130",
      'http://webshop.result.service.soap.CDRator.com/xsd' as "ax2147"
    ),
    'for $i in /soapenv:Envelope/soapenv:Body/ns:placeShopOrderResponse/ns:return/ax2147:subscriptions
      return $i/ax2130:id'
    passing XMLType(sm.RESPONSE_XML)
    columns "ID" number path '/') xt
where WEB_SERVICE_NAME='RatorWebShopService' and WEB_METHOD_NAME='placeShopOrder';

                   ID
---------------------
   201501070917439804 
   201501070917439804 

 2 rows selected 

या अगर आप कोई ax:2130 चाहते हैं नोड कहीं भी, रिक्त एक सहित, आप उपयोग कर सकते हैं:

SELECT xt.id
FROM SOAP_MONITORING sm
CROSS JOIN XMLTable(XMLNAMESPACES (
      'http://core.data.soap.CDRator.com/xsd' as "ax2130"
    ),
    'for $i in //ax2130:id return $i'
    passing XMLType(sm.RESPONSE_XML)
    columns "ID" number path '/') xt
where WEB_SERVICE_NAME='RatorWebShopService' and WEB_METHOD_NAME='placeShopOrder';

                   ID
---------------------

   201501070917439804 
   201501070917439804 

 3 rows selected 

केवल XQuery में निर्दिष्ट नामस्थानों को XMLNamespaces खंड में निर्दिष्ट करने की आवश्यकता है।

यदि आपको आवश्यकता हो तो आप चयनित आईडी के आधार पर किसी अन्य तालिका में शामिल हो सकते हैं:

SELECT xt.id
FROM SOAP_MONITORING sm
CROSS JOIN XMLTable(XMLNAMESPACES (
    ...) xt
JOIN someothertable sot on sot.id = xt.id
where sm.WEB_SERVICE_NAME='RatorWebShopService'
and sm.WEB_METHOD_NAME='placeShopOrder';


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle पाठ NVARCHAR2 के साथ काम नहीं करेगा। और क्या अनुपलब्ध हो सकता है?

  2. ओरेकल एसक्यूएल प्लस एसक्यूएल फाइल में कमांड कैसे खत्म करें?

  3. php:oracle ड्राइवर लोड हो रहा है त्रुटि देता है गतिशील पुस्तकालय लोड करने में असमर्थ - निर्दिष्ट प्रक्रिया नहीं मिल सका।

  4. Oracle STANDARD_HASH PLSQL में उपलब्ध नहीं है?

  5. आप कैसे बता सकते हैं कि पीएल/एसक्यूएल पैकेज, प्रक्रिया, या फ़ंक्शन का उपयोग किया जा रहा है या नहीं?