यह ब्लॉग 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
रैप अप करें
इस पोस्ट में वर्णित एक्सएमएल डेटा को पार्स करने के दोनों तरीके आपको एक ही अंतिम आउटपुट देते हैं। पहला तरीका तीन चरणों वाली प्रक्रिया है, जिसके लिए निम्नलिखित कोड की आवश्यकता होती है:
- Oracle तालिका बनाएं.
- XML फ़ाइल के डेटा को बनाई गई तालिका में डालें।
- तालिका से मान निकालने के लिए एक चयन कथन लिखें।
दूसरा विकल्प एक एकल-चरणीय प्रक्रिया है जहां आप एक सेलेक्ट स्टेटमेंट लिखते हैं और वांछित परिणाम प्राप्त करते हैं।
निष्कर्ष
कोई भी विकल्प काम करता है, लेकिन अगर आपको एक्सएमएल फाइल को ओरेकल फॉरफ्यूचर रेफरेंस में स्टोर करने की जरूरत है, तो आपको पहले दृष्टिकोण का उपयोग करना चाहिए क्योंकि डेटा भविष्य के संदर्भ के लिए टेबल में बना रहता है और आप इसे किसी भी समय एक्सेस कर सकते हैं।
दूसरा तरीका चुनकर, आप सीधे डेटा को पार्स कर सकते हैं। हालाँकि, इस विकल्प के साथ, मूल XML फ़ाइल डेटा को भविष्य में एक्सेस नहीं किया जा सकता है क्योंकि यह विकल्प कभी भी Oracle में XML फ़ाइल की सामग्री को संग्रहीत नहीं करता है।
कोई टिप्पणी करने या प्रश्न पूछने के लिए प्रतिक्रिया टैब का उपयोग करें।
विशेषज्ञ प्रशासन, प्रबंधन और कॉन्फ़िगरेशन के साथ अपने परिवेश को अनुकूलित करें
रैकस्पेस की एप्लिकेशन सेवाएं(RAS) विशेषज्ञ अनुप्रयोगों के व्यापक पोर्टफोलियो में निम्नलिखित पेशेवर और प्रबंधित सेवाएं प्रदान करते हैं:
- ईकामर्स और डिजिटल अनुभव प्लेटफॉर्म
- एंटरप्राइज रिसोर्स प्लानिंग (ईआरपी)
- बिजनेस इंटेलिजेंस
- बिक्री बल ग्राहक संबंध प्रबंधन (सीआरएम)
- डेटाबेस
- ईमेल होस्टिंग और उत्पादकता
हम वितरित करते हैं:
- निष्पक्ष विशेषज्ञता :हम तत्काल मूल्य प्रदान करने वाली क्षमताओं पर ध्यान केंद्रित करते हुए आपकी आधुनिकीकरण यात्रा को सरल और मार्गदर्शन करते हैं।
- कट्टर अनुभव™ :हम पहले एक प्रक्रिया को जोड़ते हैं। प्रौद्योगिकी दूसरा। व्यापक समाधान प्रदान करने के लिए समर्पित तकनीकी सहायता के साथ दृष्टिकोण।
- बेजोड़ पोर्टफोलियो :हम व्यापक क्लाउड अनुभव लागू करते हैं ताकि आपको सही क्लाउड पर सही तकनीक को चुनने और परिनियोजित करने में मदद मिल सके।
- फुर्तीली डिलीवरी :हम आपसे मिलते हैं जहां आप अपनी यात्रा में हैं और सफलता को अपने साथ संरेखित करते हैं।
आरंभ करने के लिए अभी चैट करें।