Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> डेटाबेस

पीएल/एसक्यूएल में एक्सएमएल पार्स करें

यह ब्लॉग Oracle® PL/SQL में XML डेटा को संभालने के लिए कुछ विधियों की खोज करता है। हमारी डेटाबेस सेवाओं के बारे में अधिक जानें।

यदि आप XML फ़ाइल से XML डेटा को Oracle PL/SQL पंक्तियों और स्तंभों में बदलना चाहते हैं, तो निम्नलिखित विकल्प उपलब्ध हैं:

  • XML फ़ाइल को XML तालिका में लोड करें और फिर उसे पार्स करें।
  • XML तालिका में लोड किए बिना XML फ़ाइल को सीधे पार्स करें।

XML डेटा को Oracle तालिका में लोड करने के लिए, SQLLOADER . जैसे विकल्पों का उपयोग करें ,utl_file , या XML CLOB . किसी तालिका में डेटा लोड करने के बाद, आपको प्रत्येक XML टैग से मान निकालने की आवश्यकता होती है। XML डेटा निकालने के लिए, Oracle द्वारा प्रदान किए गए बिल्ट-इनफंक्शन का उपयोग करें, जैसे XMLELEMENT , XMLAGG , XMLTABLE ,XMLSEQUENCE , और EXTRACTVALUE

उपयोग किया जाने वाला मुख्य अंतर्निहित फ़ंक्शन EXTRACT है , जो निम्न छवि में दिखाया गया है:

पीएल/एसक्यूएल में एक्सएमएल पार्स करें

छवि स्रोत :https://docs.oracle.com/cd/B19306_01/server.102/b14200/img/extract_xml.gif

उदाहरण फ़ाइल

इन विकल्पों को विस्तार से जानने के लिए, इस पोस्ट में उदाहरण फ़ाइल का उपयोग करता है, Test.xml . डेटाबेस में फ़ाइल तक पहुँचने के लिए, DBA . का उपयोग करें निर्देशिका, जिसे Oracle में परिभाषित किया गया है। उदाहरण XX_UTL_DIR . का उपयोग करते हैं संदर्भ निर्देशिका के रूप में। आप इसके बजाय अपनी पसंद की निर्देशिका का उपयोग कर सकते हैं।

Test.xml निम्नलिखित सामग्री है:

<?xml version = '1.0' encoding = 'UTF-8'?>
<UANotification xmlns="https://www.test.com/UANotification">
    <NotificationHeader>
    <Property name="ErrorMessage" value="User Data Invalid"/>
            <Property name="SPSDocumentKey" value="11111111111"/>
            <Property name="AppKey" value="22222222"/>
            <Property name="FileName" value="SH201701181418.61W"/>
            <Property name="SenderName" value="Test"/>
            <Property name="ReceiverName" value="Integrated Supply Network"/>
            <Property name="DocumentType" value="856"/>
            <Property name="SourceDataType" value="XML"/>
            <Property name="DestinationDataType" value="FEDS"/>
            <Property name="XtencilNet" value="shFedsWrite"/>
            <Property name="PreviousMaps" value="shFedsWrite]"/>
    </NotificationHeader>
    <FINotification xmlns="https://www.test.com/fileIntegration">
            <ServiceResult>
                    <DataError>
                            <Message>Invalid data test 1</Message>
                    </DataError>
                    <DataError>
                            <Message>Invalid data test 2</Message>
                    </DataError>
            </ServiceResult>
    </FINotification>
</UANotification>

पहला तरीका:एक्सएमएल फाइल को एक्सएमएल टेबल में लोड करें और फिर इसे पार्स करें

सबसे पहले, Oracle में एक तालिका बनाएं जिसमें डेटा प्रकार XMLTYPE . के साथ एक कॉलम शामिल हो ।

उदाहरण के लिए, तालिका बनाने के लिए निम्न कोड का उपयोग करें:

CREATE TABLE xml_tab (
  File_name  varchar2(100),
  xml_data  XMLTYPE
);

इसके बाद, Test.xml . से डेटा डालें xml.tab . में निम्न आदेश का उपयोग करके:.

INSERT INTO xml_tab
VALUES ( ‘Test.xml’,
XMLTYPE (BFILENAME ('XX_UTL_DIR', ‘Test.xml’),
NLS_CHARSET_ID ('AL32UTF8')
));

पिछला INSERT कथन Test.xml file फ़ाइल का डेटा सम्मिलित करता है फ़ील्ड में xml_data तालिका के xml_tab . INSERT के पूर्ण होने के बाद, XMLडेटा तालिका xml_tab . में उपलब्ध है . किसी SELECT क्वेरी में डेटा पढ़ने के लिए, आगे बताए गए SELECT स्टेटमेंट का इस्तेमाल करें।

टैग का टेक्स्ट पढ़ने के लिए Message जो पेरेंट टैग के अंतर्गत उपलब्ध हैDataError , निम्न SQL कमांड का उपयोग करें:

SELECT EXTRACT (VALUE (a1),
            '/DataError/Message/text()',
            'xmlns="https://www.test.com/fileIntegration')
      msg
 FROM xml_tab,
   TABLE (
      XMLSEQUENCE (
         EXTRACT (
            xml_data,
            '/UANotification/ns2:FINotification/ns2:ServiceResult/ns2:DataError',
            'xmlns="https://www.test.com/UANotification" xmlns:ns2="https://www.test.com/fileIntegration"'))) a1
WHERE file_name = 'Test.xml';

property name पढ़ने के लिए और इसका मान, निम्न SQL कमांड का उपयोग करें:

SELECT EXTRACTVALUE (VALUE (a1),
                 '/Property/@name',
                 'xmlns="https://www.test.com/UANotification')
      attribute,
   EXTRACTVALUE (VALUE (a1),
                 '/Property/@value',
                 'xmlns="https://www.test.com/UANotification')
      VALUE
 FROM xml_tab,
   TABLE (
      XMLSEQUENCE (
         EXTRACT (
            xml_data,
            '/UANotification/NotificationHeader/Property',
            'xmlns="https://www.test.com/UANotification" xmlns:ns2="https://www.test.com/fileIntegration"'))) a1
 WHERE file_name = 'Test.xml';

दूसरा तरीका:एक्सएमएल फाइल को एक्सएमएल टेबल में लोड किए बिना सीधे पार्स करें

अगर आप सीधे Test.xml को पार्स करना चाहते हैं इसे Oracletable में लोड किए बिना, आप निम्न चयन कथन का उपयोग कर सकते हैं:

SELECT EXTRACTvalue (VALUE (a1),
            '/Property/@name',
            'xmlns="https://www.test.com/UANotification') attribute,
             EXTRACTvalue (VALUE (a1),
            '/Property/@value',
            'xmlns="https://www.test.com/UANotification') value
 FROM
   TABLE (
      XMLSEQUENCE (
         EXTRACT (
            xmltype(BFILENAME ('XX_UTL_DIR', 'Test.xml'),NLS_CHARSET_ID ('AL32UTF8')),
            '/UANotification/NotificationHeader/Property',
            'xmlns="https://www.test.com/UANotification" xmlns:ns2="https://www.test.com/fileIntegration"'))) a1

रैप अप करें

इस पोस्ट में वर्णित एक्सएमएल डेटा को पार्स करने के दोनों तरीके आपको एक ही अंतिम आउटपुट देते हैं। पहला तरीका तीन चरणों वाली प्रक्रिया है, जिसके लिए निम्नलिखित कोड की आवश्यकता होती है:

  1. Oracle तालिका बनाएं.
  2. XML फ़ाइल के डेटा को बनाई गई तालिका में डालें।
  3. तालिका से मान निकालने के लिए एक चयन कथन लिखें।

दूसरा विकल्प एक एकल-चरणीय प्रक्रिया है जहां आप एक सेलेक्ट स्टेटमेंट लिखते हैं और वांछित परिणाम प्राप्त करते हैं।

निष्कर्ष

कोई भी विकल्प काम करता है, लेकिन अगर आपको एक्सएमएल फाइल को ओरेकल फॉरफ्यूचर रेफरेंस में स्टोर करने की जरूरत है, तो आपको पहले दृष्टिकोण का उपयोग करना चाहिए क्योंकि डेटा भविष्य के संदर्भ के लिए टेबल में बना रहता है और आप इसे किसी भी समय एक्सेस कर सकते हैं।

दूसरा तरीका चुनकर, आप सीधे डेटा को पार्स कर सकते हैं। हालाँकि, इस विकल्प के साथ, मूल XML फ़ाइल डेटा को भविष्य में एक्सेस नहीं किया जा सकता है क्योंकि यह विकल्प कभी भी Oracle में XML फ़ाइल की सामग्री को संग्रहीत नहीं करता है।

कोई टिप्पणी करने या प्रश्न पूछने के लिए प्रतिक्रिया टैब का उपयोग करें।

विशेषज्ञ प्रशासन, प्रबंधन और कॉन्फ़िगरेशन के साथ अपने परिवेश को अनुकूलित करें

रैकस्पेस की एप्लिकेशन सेवाएं(RAS) विशेषज्ञ अनुप्रयोगों के व्यापक पोर्टफोलियो में निम्नलिखित पेशेवर और प्रबंधित सेवाएं प्रदान करते हैं:

  • ईकामर्स और डिजिटल अनुभव प्लेटफॉर्म
  • एंटरप्राइज रिसोर्स प्लानिंग (ईआरपी)
  • बिजनेस इंटेलिजेंस
  • बिक्री बल ग्राहक संबंध प्रबंधन (सीआरएम)
  • डेटाबेस
  • ईमेल होस्टिंग और उत्पादकता

हम वितरित करते हैं:

  • निष्पक्ष विशेषज्ञता :हम तत्काल मूल्य प्रदान करने वाली क्षमताओं पर ध्यान केंद्रित करते हुए आपकी आधुनिकीकरण यात्रा को सरल और मार्गदर्शन करते हैं।
  • कट्टर अनुभव™ :हम पहले एक प्रक्रिया को जोड़ते हैं। प्रौद्योगिकी दूसरा। व्यापक समाधान प्रदान करने के लिए समर्पित तकनीकी सहायता के साथ दृष्टिकोण।
  • बेजोड़ पोर्टफोलियो :हम व्यापक क्लाउड अनुभव लागू करते हैं ताकि आपको सही क्लाउड पर सही तकनीक को चुनने और परिनियोजित करने में मदद मिल सके।
  • फुर्तीली डिलीवरी :हम आपसे मिलते हैं जहां आप अपनी यात्रा में हैं और सफलता को अपने साथ संरेखित करते हैं।

आरंभ करने के लिए अभी चैट करें।


  1. एकीकृत डेटा प्लेटफ़ॉर्म:SQL सर्वर 2019

    2006 में, ब्रिटिश गणितज्ञ क्लाइव रॉबर्ट हम्बी ने शब्दों को चिह्नित किया:डेटा नया तेल है। तब से, आईटी नेताओं ने इसे बार-बार सुना है, विचार के साथ प्रतिध्वनित किया है, और हर कदम पर संवर्धित किया है। क्लाइव ने आगे कहा, डेटा मूल्यवान है, लेकिन अगर अपरिष्कृत है, तो इसका वास्तव में उपयोग नहीं किया जा सकत

  1. एसक्यूएल संगरोध

    यह ब्लॉग पोस्ट SQL संगरोध की अवधारणा का परिचय देता है। Oracle® संसाधन प्रबंधक का उपयोग करके, आप CPU और I/O जैसे अन्य संसाधनों के उपयोग को विनियमित और सीमित कर सकते हैं। सबसे दिलचस्प तथ्य यह है कि आप किसी भी लंबे समय से चल रही क्वेरी के निष्पादन को रोक सकते हैं जो एक निर्धारित सीमा से अधिक है। एसक्यू

  1. अपने SQL डेटा में Elasticsearch-संचालित खोज और विज़ुअलाइज़ेशन जोड़ें

    नए NoSQL डेटा स्टोर पर ध्यान केंद्रित करने के बावजूद, रिलेशनल और SQL-आधारित डेटाबेस अभी भी जीवित हैं और अच्छी तरह से हैं। वास्तव में, हमारे साथ काम करने वाले लगभग हर ग्राहक के पास अपने वातावरण में उनके MongoDB, Redis, या Elasticsearch के साथ कुछ MySQL, PostgreSQL या MS SQL सर्वर होते हैं। किसी रिलेश