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

Oracle PL/SQL में XML पार्सिंग में महारत: कुशल तकनीकें और सर्वोत्तम अभ्यास

यह ब्लॉग 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 है, जो निम्न छवि में दिखाया गया है:

Oracle PL/SQL में XML पार्सिंग में महारत: कुशल तकनीकें और सर्वोत्तम अभ्यास

छवि स्रोत: 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>

पहला दृष्टिकोण: XML फ़ाइल को XML टेबल में लोड करें और फिर इसे पार्स करें

सबसे पहले, 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 फ़ाइल के डेटा को टेबल xml_tab के फ़ील्ड xml_data में डालता है। INSERT पूरा होने के बाद, XML डेटा टेबल xml_tab में उपलब्ध होता है। SELECT क्वेरी में डेटा पढ़ने के लिए, अगले वर्णित SELECT स्टेटमेंट का उपयोग करें।

DataError पैरेंट टैग के तहत उपलब्ध Message टैग का टेक्स्ट पढ़ने के लिए, निम्न 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';

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

यदि आप Test.xml को Oracle टेबल में लोड किए बिना सीधे पार्स करना चाहते हैं, तो आप निम्न SELECT स्टेटमेंट का उपयोग कर सकते हैं:

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

समाप्ति

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

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

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

निष्कर्ष

दोनों विकल्प काम करते हैं, लेकिन यदि आपको भविष्य के संदर्भ के लिए XML फ़ाइल को Oracle में संग्रहीत करने की आवश्यकता है, तो आपको पहले दृष्टिकोण का उपयोग करना चाहिए क्योंकि डेटा भविष्य के संदर्भ के लिए टेबल में बना रहता है और आप इसे किसी भी समय एक्सेस कर सकते हैं।

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

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

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

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

  • ईकॉमर्स और डिजिटल एक्सपीरियंस प्लेटफॉर्म
  • एंटरप्राइज रिसोर्स प्लानिंग (ERP)
  • बिजनेस इंटेलिजेंस
  • सेल्सफोर्स कस्टमर रिलेशनशिप मैनेजमेंट (CRM)
  • डेटाबेस
  • ईमेल होस्टिंग और उत्पादकता

हम प्रदान करते हैं:

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

अभी चैट करें शुरू करने के लिए।

  1. SQL Server 2019: आधुनिक विश्लेषण के लिए एकीकृत डेटा प्लेटफॉर्म SQL Server 2019: आधुनिक विश्लेषण के लिए एकीकृत डेटा प्लेटफॉर्म

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

  1. Oracle 19c SQL क्वारंटाइन के साथ रनअवे क्वेरी को रोकें Oracle 19c SQL क्वारंटाइन के साथ रनअवे क्वेरी को रोकें

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

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

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