এই ব্লগে Oracle® PL/SQL-এ XML ডেটা হ্যান্ডেল করার কিছু পদ্ধতি অন্বেষণ করা হয়েছে। আমাদের ডেটাবেস সেবা সম্পর্কে আরও জানুন।
আপনি যদি একটি XML ফাইল থেকে XML ডেটা Oracle PL/SQL সারি এবং কলামে কনভার্ট করতে চান, তবে নিচের অপশনগুলো উপলব্ধ:
- XML ফাইলটি একটি XML টেবিলে লোড করুন এবং তারপর পার্স করুন।
- XML টেবিলে লোড না করে সরাসরি XML ফাইল পার্স করুন।
Oracle টেবিলে XML ডেটা লোড করতে, 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> প্রথম পদ্ধতি: 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 ডেটা পার্স করার দুটি পদ্ধতিই একই চূড়ান্ত আউটপুট দেয়। প্রথম পদ্ধতিটি তিন ধাপের প্রক্রিয়া, যheten নিচের কোডের টুকরো প্রয়োজন:
- Oracle টেবিল তৈরি করুন।
- তৈরি করা টেবিলে XML ফাইলের ডেটা ইনসার্ট করুন।
- টেবিল থেকে মান বের করার জন্য একটি SELECT স্টেটমেন্ট লিখুন।
দ্বিতীয় অপশনটি একটি একক ধাপের প্রক্রিয়া যেখানে আপনি একটি SELECT স্টেটমেন্ট লিখেন এবং কাঙ্খিত ফলাফল পান।
উপসংহার
উভয় অপশনই কাজ করে, কিন্তু আপনি যদি ভবিষ্যতে রেফারেন্সের জন্য XML ফাইলটি Oracle-এ স্টোর করতে চান, তবে আপনাকে প্রথম পদ্ধতি ব্যবহার করা উচিত কারণ ডেটা টেবিলে ভবিষ্যতে রেফারেন্সের জন্য persists করে থাকে এবং আপনি যেকোনো সময় অ্যাক্সেস করতে পারেন।
দ্বিতীয় পদ্ধতি বেছে নিলে, আপনি সরাসরি ডেটা পার্স করতে পারেন। তবে, এই অপশনে, মূল XML ফাইল ডেটা ভবিষ্যতে অ্যাক্সেস করা যাবে না কারণ এই অপশনটি XML ফাইলের কন্টেন্ট কখনো Oracle-এ স্টোর করে না।
ফিডব্যাক ট্যাব ব্যবহার করে যেকোনো মন্তব্য করুন বা প্রশ্ন জিজ্ঞাসা করুন।
বিশেষজ্ঞ প্রশাসন, ব্যবস্থাপনা, এবং কনফিগারেশন দিয়ে আপনার এনভায়রনমেন্ট অপ্টিমাইজ করুন
Rackspace-এর অ্যাপ্লিকেশন সার্ভিস (RAS) এক্সপার্টরা অ্যাপ্লিকেশনের একটি ব্যাপক পোর্টফোলিওতে নিচের প্রফেশনাল এবং ম্যানেজড সার্ভিস প্রদান করে:
- ই-কমার্স এবং ডিজিটাল এক্সপেরিয়েন্স প্ল্যাটফর্ম
- এন্টারপ্রাইজ রিসোর্স প্ল্যানিং (ERP)
- বিজনেস ইন্টেলিজেন্স
- Salesforce কাস্টমার রিলেশনশিপ ম্যানেজমেন্ট (CRM)
- ডেটাবেস
- ইমেইল হোস্টিং এবং প্রোডাক্টিভিটি
আমরা ডেলিভার করি:
- পক্ষপাতমুক্ত এক্সপার্টিজ: আমরা আপনার মডার্নাইজেশন যাত্রা সহজ করে দেই এবং গাইড করি, যেসব ক্ষমতা তৎক্ষণিক মান দেয় সেগুলোতে ফোকাস করে।
- ফ্যানেটিক্যাল এক্সপেরিয়েন্স™: আমরা একটি প্রসেস ফার্স্ট, টেকনোলজি সেকেন্ড® পদ্ধতির সাথে ডেডিকেটেড টেকনিক্যাল সাপোর্ট কম্বাইন করি যেন কম্প্রিহেনসিভ সমাধান প্রদান করা যায়।
- অনম্যাচড পোর্টফোলিও: আমরা ব্যাপক ক্লাউড এক্সপেরিয়েন্স প্রয়োগ করি যাতে আপনি সঠিক টেকনোলজি সঠিক ক্লাউডে বেছে নিতে এবং ডিপ্লয় করতে পারেন।
- এজাইল ডেলিভারি: আমরা আপনার যাত্রায় আপনি যেখানে আছেন সেখানে আপনাকে মিট করি এবং আমাদের সাফল্য আপনার সাথে অ্যালাইন করি।
এখন চ্যাট করে শুরু করুন।