PL/SQL তে XML এবং JSON ডেটা ফরম্যাটের সাথে ইন্টিগ্রেশন সম্ভব, যা বিভিন্ন ধরনের ডেটা এক্সচেঞ্জ এবং সংরক্ষণের জন্য ব্যবহৃত হয়। XML এবং JSON দুটি জনপ্রিয় ডেটা ফরম্যাট, যা বিভিন্ন অ্যাপ্লিকেশন, ওয়েব সার্ভিস, এবং ডেটাবেস সিস্টেমের মধ্যে ডেটা পাঠানোর এবং গ্রহণের জন্য ব্যবহৃত হয়। PL/SQL-এ XML এবং JSON হ্যান্ডলিং এর জন্য Oracle কিছু বিল্ট-ইন প্যাকেজ প্রদান করে, যার মাধ্যমে XML এবং JSON ডেটা পার্স, জেনারেট এবং প্রসেস করা সম্ভব।
এই টিউটোরিয়ালে আমরা PL/SQL এর মাধ্যমে XML এবং JSON ডেটার ইন্টিগ্রেশন দেখবো, এবং এর বিভিন্ন সুবিধা ও ব্যবহারিক দিকগুলো আলোচনা করবো।
PL/SQL দিয়ে XML ডেটা হ্যান্ডলিং
Oracle ডেটাবেস XML ডেটার সাথে কাজ করতে কিছু বিশেষ প্যাকেজ এবং ফাংশন প্রদান করে, যেমন DBMS_XMLGEN, DBMS_XMLQUERY ইত্যাদি। এই প্যাকেজগুলো XML ডেটা তৈরি এবং পার্স করার জন্য ব্যবহৃত হয়।
XML ডেটা তৈরি করা (DBMS_XMLGEN ব্যবহার)
DBMS_XMLGEN প্যাকেজটি ডেটাবেস থেকে ডেটা নির্বাচন করে XML আউটপুট তৈরি করতে ব্যবহার করা হয়।
DECLARE
v_xml XMLTYPE;
BEGIN
-- Create XML output using DBMS_XMLGEN
v_xml := DBMS_XMLGEN.getXML('SELECT employee_id, first_name, last_name FROM employees');
DBMS_OUTPUT.PUT_LINE(v_xml.getClobVal());
END;
Explanation:
- এখানে
DBMS_XMLGEN.getXML()ফাংশনটি SQL কুইরি চালিয়ে তার আউটপুট XML ফরম্যাটে তৈরি করে। getClobVal()ফাংশনটি XML ডেটাকে CLOB ফরম্যাটে ফেরত দেয়, যা পরে প্রিন্ট করা হয়।
XML ডেটা পার্স করা (DBMS_XMLQUERY ব্যবহার)
XML ডেটাকে PL/SQL ব্লকে পার্স করার জন্য DBMS_XMLQUERY প্যাকেজটি ব্যবহার করা হয়। এটি XML ডেটা থেকে নির্দিষ্ট তথ্য বের করার জন্য ব্যবহৃত হয়।
DECLARE
v_xml XMLTYPE;
v_name VARCHAR2(100);
BEGIN
-- Sample XML Data
v_xml := XMLTYPE('<employee><name>John Doe</name><age>30</age></employee>');
-- Extract name from XML
SELECT extractValue(v_xml, '/employee/name') INTO v_name FROM dual;
DBMS_OUTPUT.PUT_LINE('Employee Name: ' || v_name);
END;
Explanation:
- এখানে একটি XML ডেটা
XMLTYPEএ সংরক্ষিত হচ্ছে। - তারপর
extractValue()ফাংশনটি ব্যবহার করে XML থেকেnameএলিমেন্ট বের করা হচ্ছে।
PL/SQL দিয়ে JSON ডেটা হ্যান্ডলিং
Oracle 12c এর পর থেকে JSON ডেটা হ্যান্ডলিং এর জন্য JSON_OBJECT, JSON_TABLE, JSON_VALUE এবং অন্যান্য ফাংশনও যুক্ত করা হয়েছে। এই ফাংশনগুলো JSON ডেটা তৈরি, পার্স, এবং প্রসেস করতে ব্যবহার করা যায়।
JSON ডেটা তৈরি করা (JSON_OBJECT ব্যবহার)
JSON_OBJECT ফাংশনটি JSON ডেটা তৈরি করতে ব্যবহার করা হয়।
DECLARE
v_json VARCHAR2(4000);
BEGIN
-- Create JSON object
v_json := JSON_OBJECT('name' VALUE 'John Doe', 'age' VALUE 30);
DBMS_OUTPUT.PUT_LINE(v_json);
END;
Explanation:
- এখানে
JSON_OBJECTফাংশনটি একটি JSON অবজেক্ট তৈরি করছে যেখানেnameএবংageএর মান রয়েছে। DBMS_OUTPUT.PUT_LINEএর মাধ্যমে JSON আউটপুট প্রিন্ট করা হয়।
JSON ডেটা পার্স করা (JSON_VALUE এবং JSON_TABLE ব্যবহার)
JSON ডেটা থেকে নির্দিষ্ট মান বের করার জন্য JSON_VALUE বা JSON_TABLE ফাংশন ব্যবহার করা হয়।
DECLARE
v_json VARCHAR2(4000) := '{"name": "John Doe", "age": 30}';
v_name VARCHAR2(100);
BEGIN
-- Extract name from JSON
SELECT JSON_VALUE(v_json, '$.name') INTO v_name FROM dual;
DBMS_OUTPUT.PUT_LINE('Employee Name: ' || v_name);
END;
Explanation:
- এখানে একটি JSON স্ট্রিং
v_jsonএ সংরক্ষিত হচ্ছে। JSON_VALUE()ফাংশনটি JSON থেকেnameপ্রপার্টি বের করে এবং তাv_nameভেরিয়েবলে সংরক্ষণ করে।
JSON ডেটা টেবিল হিসেবে রূপান্তর করা (JSON_TABLE ব্যবহার)
JSON_TABLE ফাংশনটি JSON ডেটাকে একটি টেবিল আউটপুট হিসেবে রূপান্তর করতে ব্যবহার করা হয়।
DECLARE
v_json VARCHAR2(4000) := '[{"name": "John Doe", "age": 30}, {"name": "Jane Doe", "age": 25}]';
BEGIN
-- Convert JSON Array into Table format
FOR rec IN (SELECT * FROM JSON_TABLE(v_json, '$[*]' COLUMNS (name VARCHAR2(100) PATH '$.name', age NUMBER PATH '$.age')))
LOOP
DBMS_OUTPUT.PUT_LINE('Name: ' || rec.name || ', Age: ' || rec.age);
END LOOP;
END;
Explanation:
- এখানে
JSON_TABLEব্যবহার করে একটি JSON অ্যারে কে টেবিল আউটপুটে রূপান্তর করা হচ্ছে। - তারপর টেবিল থেকে ডেটা বের করে
DBMS_OUTPUT.PUT_LINEএর মাধ্যমে প্রিন্ট করা হচ্ছে।
PL/SQL এবং XML/JSON Integration এর সুবিধা
- ওয়েব সার্ভিসে ডেটা এক্সচেঞ্জ: PL/SQL এবং XML/JSON ইন্টিগ্রেশন ব্যবহার করে ডেটাবেস এবং ওয়েব সার্ভিসের মধ্যে ডেটা আদান-প্রদান করা যায়।
- সীমিত ব্যান্ডউইথ ব্যবহার: XML বা JSON ডেটা কমপ্যাক্ট এবং পাঠযোগ্য হওয়ায় তারা সীমিত ব্যান্ডউইথে দ্রুত ডেটা পাঠাতে সহায়তা করে।
- স্ট্রাকচারড ডেটা সংরক্ষণ: XML বা JSON ডেটা হাইরারকিক্যাল এবং স্ট্রাকচারড ডেটা সংরক্ষণের জন্য উপযুক্ত, যা প্ল্যাটফর্মে ডেটা এক্সচেঞ্জের জন্য অত্যন্ত কার্যকর।
- ডেটাবেস পারফরম্যান্স উন্নতি: PL/SQL এর মাধ্যমে XML বা JSON ডেটার প্রক্রিয়া দ্রুত করতে পারফরম্যান্স অপ্টিমাইজেশন করা যায়।
Conclusion
PL/SQL দিয়ে XML এবং JSON ডেটা হ্যান্ডলিং অত্যন্ত শক্তিশালী এবং কার্যকরী পদ্ধতি। XML এবং JSON ডেটা কনভার্শন, প্রোসেসিং, এবং এক্সচেঞ্জের জন্য PL/SQL-এ উপলব্ধ ফাংশন এবং প্যাকেজগুলো ব্যবহার করে আপনাদের ডেটাবেস অ্যাপ্লিকেশনগুলো আরও ক্ষমতাশালী এবং কার্যকরী করা যায়। XML এবং JSON ডেটা ফরম্যাটের সাহায্যে ওয়েব সার্ভিস, API ইন্টিগ্রেশন, এবং ডেটা ট্রান্সফার আরও সহজ হয়।
PL/SQL-এ XML ডেটা হ্যান্ডলিং একটি গুরুত্বপূর্ণ বিষয়, কারণ অনেক সময় ডেটাবেসে XML ফরম্যাটে ডেটা স্টোর বা প্রসেস করা প্রয়োজন হয়। Oracle ডেটাবেস XML ডেটা হ্যান্ডলিং-এর জন্য কিছু বিশেষ ফিচার এবং ফাংশন প্রদান করে, যা XML ডেটার সাথে কার্যকরীভাবে কাজ করতে সাহায্য করে।
Oracle-এ XML ডেটা স্টোর করার জন্য XMLType ডেটা টাইপ ব্যবহার করা হয়। এই ডেটা টাইপটি XML ডেটা ম্যানিপুলেট, পার্স, এবং স্টোর করার সুবিধা দেয়।
XML ডেটার সাথে কাজ করার জন্য PL/SQL ফিচারসমূহ
- XMLType ডেটা টাইপ
- XMLTable ফাংশন
- XMLParse, XMLSerialize, XMLExists ফাংশন
- XPath কুয়েরি সাপোর্ট
- XQuery কুয়েরি সাপোর্ট
1. XMLType ডেটা টাইপ ব্যবহার
Oracle-এ XMLType হল একটি বিশেষ ডেটা টাইপ যা XML ডেটা সংরক্ষণ করতে ব্যবহৃত হয়। এটি XML ডেটাকে পার্স, স্টোর এবং প্রসেস করার জন্য সুবিধা প্রদান করে।
XMLType ডেটা তৈরি করা:
DECLARE
xml_data XMLTYPE;
BEGIN
-- XML ডেটা তৈরি এবং XMLType ভেরিয়েবলে সেট করা
xml_data := XMLTYPE('<employee><id>101</id><name>John Doe</name><salary>50000</salary></employee>');
-- XML ডেটা আউটপুট প্রদর্শন
DBMS_OUTPUT.PUT_LINE(xml_data.getStringVal());
END;
এখানে, XMLTYPE ব্যবহার করে একটি XML ডেটা স্ট্রিং তৈরি করা হয়েছে এবং তারপর সেটি আউটপুট হিসাবে দেখানো হয়েছে।
2. XMLTable ব্যবহার
XMLTable একটি শক্তিশালী ফাংশন যা XML ডেটাকে relational টেবিল ফরম্যাটে কনভার্ট করে। এটি XML ডেটার উপর SQL কুয়েরি করার সুবিধা দেয়।
XMLTable উদাহরণ:
ধরা যাক, আপনার কাছে একটি XML ডেটা রয়েছে যা কিছু কর্মচারী সম্পর্কে তথ্য ধারণ করে, এবং আপনি এই XML ডেটা থেকে তথ্য বের করতে চান।
DECLARE
xml_data XMLTYPE;
BEGIN
-- XML ডেটা তৈরি
xml_data := XMLTYPE('<employees><employee><id>101</id><name>John Doe</name><salary>50000</salary></employee>
<employee><id>102</id><name>Jane Smith</name><salary>60000</salary></employee></employees>');
-- XMLTable ব্যবহার করে XML ডেটা থেকে তথ্য বের করা
FOR rec IN (
SELECT *
FROM XMLTABLE(
'/employees/employee'
PASSING xml_data
COLUMNS
emp_id NUMBER PATH 'id',
emp_name VARCHAR2(50) PATH 'name',
emp_salary NUMBER PATH 'salary'
)
) LOOP
DBMS_OUTPUT.PUT_LINE('Employee ID: ' || rec.emp_id || ', Name: ' || rec.emp_name || ', Salary: ' || rec.emp_salary);
END LOOP;
END;
এখানে, XMLTable ব্যবহার করে XML ডেটার মধ্যে <employee> এলিমেন্টের সব কর্মচারী তথ্য রিলেশনাল ফরম্যাটে বের করা হয়েছে এবং তা আউটপুট হিসেবে প্রদর্শিত হয়েছে।
3. XMLParse এবং XMLSerialize
Oracle PL/SQL-এ XMLParse এবং XMLSerialize ফাংশনগুলি XML ডেটার পার্সিং এবং সিরিয়ালাইজেশন (স্টোর করার জন্য ফরম্যাটে রূপান্তর) করতে ব্যবহৃত হয়।
XMLParse উদাহরণ:
DECLARE
xml_data XMLTYPE;
BEGIN
-- XML স্ট্রিং পার্স করা
xml_data := XMLTYPE('<employee><id>101</id><name>John Doe</name><salary>50000</salary></employee>');
-- XML ডেটার মান বের করা
DBMS_OUTPUT.PUT_LINE(xml_data.getStringVal());
END;
XMLSerialize উদাহরণ:
XMLSerialize ব্যবহার করে XML ডেটাকে স্টোর করার জন্য উপযুক্ত ফরম্যাটে কনভার্ট করা হয়।
DECLARE
xml_data XMLTYPE;
serialized_data VARCHAR2(4000);
BEGIN
-- XML ডেটা তৈরি
xml_data := XMLTYPE('<employee><id>101</id><name>John Doe</name><salary>50000</salary></employee>');
-- XMLSerialize ব্যবহার করে XML ডেটা সিরিয়ালাইজ করা
serialized_data := xml_data.getStringVal();
-- সিরিয়ালাইজড ডেটা আউটপুট
DBMS_OUTPUT.PUT_LINE(serialized_data);
END;
4. XMLExists ফাংশন
XMLExists একটি ফাংশন যা চেক করে যে একটি নির্দিষ্ট XPath এক্সপ্রেশন XML ডেটায় বিদ্যমান কিনা। এটি একটি BOOLEAN মান রিটার্ন করে।
XMLExists উদাহরণ:
DECLARE
xml_data XMLTYPE;
BEGIN
-- XML ডেটা তৈরি
xml_data := XMLTYPE('<employee><id>101</id><name>John Doe</name><salary>50000</salary></employee>');
-- XMLExists ব্যবহার করে চেক করা
IF XMLExists('declare default element namespace "http://www.w3.org/2001/XMLSchema-instance";
/employee/name[text()="John Doe"]', xml_data) THEN
DBMS_OUTPUT.PUT_LINE('Employee John Doe exists.');
ELSE
DBMS_OUTPUT.PUT_LINE('Employee John Doe does not exist.');
END IF;
END;
এখানে, XPath এক্সপ্রেশন ব্যবহার করে চেক করা হচ্ছে, কর্মচারী "John Doe" ডেটা XML-এ উপস্থিত কিনা।
5. XML ডেটার ইনসার্ট ও আপডেট
XML ডেটা ইনসার্ট বা আপডেট করতে XMLType-এর জন্য বিভিন্ন মেথড রয়েছে, যেমন insertChildXML, updateXML ইত্যাদি।
XML ইনসার্ট উদাহরণ:
DECLARE
xml_data XMLTYPE;
BEGIN
-- XML ডেটা তৈরি
xml_data := XMLTYPE('<employees><employee><id>101</id><name>John Doe</name><salary>50000</salary></employee></employees>');
-- নতুন employee ইনসার্ট করা
xml_data := xml_data.insertChildXML('employees', '<employee><id>102</id><name>Jane Smith</name><salary>60000</salary></employee>');
-- আপডেটেড XML দেখানো
DBMS_OUTPUT.PUT_LINE(xml_data.getStringVal());
END;
এখানে, insertChildXML মেথড ব্যবহার করে নতুন কর্মচারী তথ্য XML ডেটায় যোগ করা হয়েছে।
সারাংশ:
PL/SQL-এ XML ডেটা হ্যান্ডলিং একটি শক্তিশালী টুল যা ডেটাবেসে XML ডেটার সাথে কার্যকরীভাবে কাজ করতে সাহায্য করে। XMLType ডেটা টাইপের মাধ্যমে XML ডেটা তৈরি, পার্স, এবং ম্যানিপুলেশন করা সম্ভব। এছাড়া XMLTable, XMLParse, XMLSerialize, এবং XMLExists ফাংশন ব্যবহার করে XML ডেটার সাথে বিভিন্ন কার্যক্রম সম্পন্ন করা যায়।
এটি আপনাকে বিভিন্ন ফরম্যাটে ডেটা স্টোর, প্রসেস, এবং এক্সপোর্ট করতে সাহায্য করে, যেমন ওয়েব সেবা বা অন্য সিস্টেমে ডেটা প্রেরণের জন্য।
Oracle PL/SQL তে XML ডেটার সাথে কাজ করার জন্য দুটি শক্তিশালী প্যাকেজ রয়েছে: DBMS_XMLGEN এবং DBMS_XMLQUERY। এগুলি XML ডেটা তৈরি এবং কুইরি করার জন্য ব্যবহৃত হয়। এই প্যাকেজগুলো XML ডেটা প্রক্রিয়াকরণকে আরও সহজ এবং কার্যকর করে তোলে। আসুন, এগুলোর ব্যবহার নিয়ে বিস্তারিত আলোচনা করি।
1. DBMS_XMLGEN প্যাকেজ
DBMS_XMLGEN প্যাকেজটি XML ফরম্যাটে ডেটা জেনারেট করতে ব্যবহৃত হয়। এটি SELECT কুয়েরি থেকে XML ফাইল তৈরি করে, যা বিভিন্ন অ্যাপ্লিকেশন বা সিস্টেমের সাথে ইন্টিগ্রেট করতে সাহায্য করে। এই প্যাকেজটি সাধারণত ডেটাবেস থেকে XML ডেটা এক্সট্র্যাক্ট করার জন্য ব্যবহৃত হয়।
মূল ফাংশন:
- GETXML: একটি কুয়েরি (SELECT স্টেটমেন্ট) থেকে XML ডেটা তৈরি করে।
- GETXMLTYPE: একটি XML ডেটাকে XMLTYPE আউটপুট হিসেবে রিটার্ন করে।
উদাহরণ:
DECLARE
v_xml XMLTYPE;
BEGIN
-- Retrieve data from a table and convert it to XML format
v_xml := DBMS_XMLGEN.GETXML('SELECT emp_id, name FROM employees WHERE department_id = 10');
-- Output the generated XML
DBMS_OUTPUT.PUT_LINE(v_xml.getStringVal());
END;
/
এখানে:
- DBMS_XMLGEN.GETXML ফাংশনটি
SELECTকুয়েরি থেকে XML ডেটা তৈরি করে। - v_xml.getStringVal() ব্যবহার করে XML ডেটা আউটপুট হিসেবে দেখা যায়।
আউটপুট উদাহরণ:
<?xml version="1.0"?>
<ROWSET>
<ROW>
<EMP_ID>1001</EMP_ID>
<NAME>John Doe</NAME>
</ROW>
<ROW>
<EMP_ID>1002</EMP_ID>
<NAME>Jane Smith</NAME>
</ROW>
</ROWSET>
2. DBMS_XMLQUERY প্যাকেজ
DBMS_XMLQUERY প্যাকেজটি XML ডেটা কুয়েরি করার জন্য ব্যবহৃত হয়। এটি XML ডেটার ভিতরে কুয়েরি চালাতে, তথ্য বের করতে এবং XML ডেটার মধ্যে পরিবর্তন করতে সাহায্য করে। এই প্যাকেজটি মূলত XPath বা XQuery ব্যবহার করে XML ডেটাতে কুয়েরি চালাতে ব্যবহৃত হয়।
মূল ফাংশন:
- EXTRACT: XPath ব্যবহার করে XML ডেটা থেকে তথ্য বের করে।
- EXTRACTVALUE: XML ডেটা থেকে একক মান বের করে।
- QUERY: XQuery ব্যবহার করে XML ডেটা থেকে বিভিন্ন তথ্য বের করতে পারে।
উদাহরণ:
DECLARE
v_xml XMLTYPE;
v_value VARCHAR2(100);
BEGIN
-- Retrieve XML data from a table
v_xml := DBMS_XMLGEN.GETXML('SELECT emp_id, name FROM employees WHERE department_id = 10');
-- Query the XML data to extract employee names
v_value := DBMS_XMLQUERY.EXTRACTVALUE(v_xml, '/ROWSET/ROW/NAME');
-- Output the extracted value
DBMS_OUTPUT.PUT_LINE('Employee Name: ' || v_value);
END;
/
এখানে:
- DBMS_XMLGEN.GETXML ব্যবহার করে XML ডেটা তৈরি করা হয়েছে।
- DBMS_XMLQUERY.EXTRACTVALUE ব্যবহার করে XML ডেটার মধ্যে থেকে
NAMEট্যাগের মান বের করা হয়েছে।
আউটপুট উদাহরণ:
Employee Name: John Doe
3. DBMS_XMLGEN এবং DBMS_XMLQUERY এর মধ্যে পার্থক্য
| ফিচার | DBMS_XMLGEN | DBMS_XMLQUERY |
|---|---|---|
| কাজ | SQL কুয়েরি থেকে XML ডেটা তৈরি করে। | XML ডেটা থেকে কুয়েরি চালিয়ে প্রয়োজনীয় তথ্য বের করে। |
| ফাংশন | GETXML, GETXMLTYPE | EXTRACT, EXTRACTVALUE, QUERY |
| ব্যবহার | XML ডেটা প্রজন্মের জন্য ব্যবহৃত হয়। | XML ডেটার ভিতরে কুয়েরি চালানোর জন্য ব্যবহৃত হয়। |
| উদাহরণ | DBMS_XMLGEN.GETXML ব্যবহার করে XML ডেটা তৈরি করা। | DBMS_XMLQUERY.EXTRACTVALUE ব্যবহার করে XML থেকে ডেটা বের করা। |
4. DBMS_XMLGEN এবং DBMS_XMLQUERY এর বাস্তব উদাহরণ
DBMS_XMLGEN উদাহরণ:
DECLARE
v_xml XMLTYPE;
BEGIN
-- Retrieve XML data using SELECT query
v_xml := DBMS_XMLGEN.GETXML('SELECT emp_id, name FROM employees WHERE department_id = 10');
-- Print the XML data
DBMS_OUTPUT.PUT_LINE(v_xml.getStringVal());
END;
/
এখানে DBMS_XMLGEN.GETXML ব্যবহার করে employees টেবিল থেকে emp_id এবং name এর তথ্য XML ফরম্যাটে আনা হয়েছে।
DBMS_XMLQUERY উদাহরণ:
DECLARE
v_xml XMLTYPE;
v_value VARCHAR2(100);
BEGIN
-- Retrieve XML data from a table
v_xml := DBMS_XMLGEN.GETXML('SELECT emp_id, name FROM employees WHERE department_id = 10');
-- Query the XML data to extract employee names using XPath
v_value := DBMS_XMLQUERY.EXTRACTVALUE(v_xml, '/ROWSET/ROW/NAME');
-- Output the extracted value
DBMS_OUTPUT.PUT_LINE('Employee Name: ' || v_value);
END;
/
এখানে, DBMS_XMLQUERY.EXTRACTVALUE ব্যবহার করে XML ডেটার মধ্যে থেকে NAME ট্যাগের মান বের করা হয়েছে।
উপসংহার
DBMS_XMLGEN এবং DBMS_XMLQUERY হল শক্তিশালী প্যাকেজ যা XML ডেটা তৈরি এবং কুয়েরি করতে ব্যবহৃত হয়। এগুলি বিশেষভাবে তখন ব্যবহৃত হয় যখন ডেটাবেসের তথ্য XML ফরম্যাটে প্রক্রিয়াকরণ এবং এক্সচেঞ্জ করতে হয়। আপনি যদি PL/SQL তে XML ডেটা হ্যান্ডলিংয়ের জন্য কাজ করছেন, তবে এই প্যাকেজ দুটি অত্যন্ত কার্যকরী এবং উপকারী।
JSON (JavaScript Object Notation) হল একটি সাধারণ এবং জনপ্রিয় ডেটা বিনিময় ফর্ম্যাট যা মানুষের পঠনযোগ্য এবং মেশিন-ও পড়তে সহজ। এটি মূলত JavaScript এ ব্যবহৃত হলেও, বর্তমানে অন্যান্য প্রোগ্রামিং ভাষাতেও ব্যাপকভাবে ব্যবহৃত হচ্ছে, যেমন PL/SQL, Python, Java, C#, ইত্যাদি।
PL/SQL এর মাধ্যমে JSON ডেটা ম্যানেজমেন্ট এর সুবিধা হল, আপনি JSON ডেটা সংগ্রহ, প্রক্রিয়া এবং স্টোর করতে পারেন, এবং Oracle Database-এ সেই JSON ডেটার সাথে কাজ করতে পারবেন।
Oracle 12c সংস্করণ থেকে JSON ডেটা সরাসরি Oracle Database-এ সংরক্ষণ ও পরিচালনা করা সম্ভব হয়েছে। এর ফলে, JSON ফাইল বা স্ট্রিং ডেটাকে SQL এবং PL/SQL এর মাধ্যমে স্টোর, রিট্রিভ, আপডেট এবং ডিলিট করা সম্ভব।
PL/SQL এ JSON ডেটা ম্যানেজমেন্টের মূল ফিচারসমূহ:
- JSON ডেটা টাইপ:
- Oracle Database 12c এবং পরবর্তী সংস্করণগুলো JSON ডেটা স্টোর করার জন্য নির্দিষ্ট ডেটা টাইপ সরবরাহ করে, যেমন
JSONটাইপ।
- Oracle Database 12c এবং পরবর্তী সংস্করণগুলো JSON ডেটা স্টোর করার জন্য নির্দিষ্ট ডেটা টাইপ সরবরাহ করে, যেমন
- JSON_OBJECT এবং JSON_ARRAY:
JSON_OBJECTএবংJSON_ARRAYফাংশনগুলি JSON ডেটা তৈরি করতে এবং সেগুলোকে ফরম্যাট করতে ব্যবহার করা হয়।
- JSON ডেটা রিট্রিভাল:
- PL/SQL এ JSON ডেটা রিট্রিভ করতে
JSON_TABLE,JSON_VALUE,JSON_QUERY, ইত্যাদি ফাংশন ব্যবহার করা যায়।
- PL/SQL এ JSON ডেটা রিট্রিভ করতে
- JSON ডেটার সাথে SQL Queries:
- আপনি JSON ডেটার উপর SQL কোয়েরি চালাতে পারেন, যেমন JSON এর নির্দিষ্ট পদের মান বের করা বা JSON ডেটা ফিল্টার করা।
- JSON স্টোর করা:
- JSON ডেটা টেবিলের কলাম হিসেবে সংরক্ষণ করা যায়।
PL/SQL দিয়ে JSON ডেটা পরিচালনা করার কিছু প্রাথমিক উদাহরণ:
১. JSON ডেটা তৈরি করা (JSON_OBJECT)
DECLARE
json_data VARCHAR2(4000);
BEGIN
-- JSON_OBJECT ব্যবহার করে JSON ডেটা তৈরি
json_data := JSON_OBJECT('id' VALUE 101, 'name' VALUE 'John Doe', 'age' VALUE 30);
DBMS_OUTPUT.PUT_LINE('JSON Data: ' || json_data);
END;
এখানে, আমরা একটি JSON অবজেক্ট তৈরি করেছি, যেখানে id, name, এবং age নামক তিনটি অ্যাট্রিবিউট রয়েছে। এই JSON ডেটা json_data ভেরিয়েবলে সংরক্ষিত হবে।
২. JSON_ARRAY তৈরি করা
DECLARE
json_array VARCHAR2(4000);
BEGIN
-- JSON_ARRAY ব্যবহার করে JSON অ্যারে তৈরি
json_array := JSON_ARRAY('Apple', 'Banana', 'Orange');
DBMS_OUTPUT.PUT_LINE('JSON Array: ' || json_array);
END;
এখানে, আমরা একটি JSON অ্যারে তৈরি করেছি, যেখানে তিনটি ফলের নাম রয়েছে।
৩. JSON ডেটা টেবিলের মধ্যে সংরক্ষণ করা
CREATE TABLE employees (
employee_id NUMBER PRIMARY KEY,
employee_data CLOB
);
-- JSON ডেটা টেবিলের মধ্যে ইনসার্ট করা
DECLARE
json_data CLOB;
BEGIN
json_data := JSON_OBJECT('employee_id' VALUE 101, 'name' VALUE 'John Doe', 'department' VALUE 'Sales');
INSERT INTO employees (employee_id, employee_data) VALUES (101, json_data);
COMMIT;
END;
এখানে, আমরা একটি টেবিল employees তৈরি করেছি, যেখানে employee_data কলামটি JSON ডেটা স্টোর করতে ব্যবহার করা হবে। পরবর্তীতে, একটি JSON অবজেক্ট তৈরি করে তা টেবিলের মধ্যে ইনসার্ট করা হয়েছে।
৪. JSON ডেটা রিট্রিভ করা (JSON_VALUE)
DECLARE
json_data CLOB;
emp_name VARCHAR2(50);
BEGIN
-- JSON ডেটা রিট্রিভ করা
SELECT employee_data INTO json_data FROM employees WHERE employee_id = 101;
-- JSON_VALUE ব্যবহার করে নামের মান বের করা
emp_name := JSON_VALUE(json_data, '$.name');
DBMS_OUTPUT.PUT_LINE('Employee Name: ' || emp_name);
END;
এখানে, আমরা employees টেবিল থেকে JSON ডেটা রিট্রিভ করেছি এবং তার মধ্যে থেকে name ফিল্ডের মান বের করেছি।
৫. JSON ডেটার উপর SQL Query ব্যবহার (JSON_TABLE)
DECLARE
json_data CLOB;
BEGIN
json_data := '{"employee_id":101, "name":"John Doe", "department":"Sales"}';
-- JSON_TABLE ব্যবহার করে JSON ডেটা থেকে SQL রেজাল্ট তৈরি
FOR rec IN (SELECT * FROM JSON_TABLE(json_data, '$'
COLUMNS (
employee_id NUMBER PATH '$.employee_id',
name VARCHAR2(50) PATH '$.name',
department VARCHAR2(50) PATH '$.department'
)
)) LOOP
DBMS_OUTPUT.PUT_LINE('Employee ID: ' || rec.employee_id);
DBMS_OUTPUT.PUT_LINE('Name: ' || rec.name);
DBMS_OUTPUT.PUT_LINE('Department: ' || rec.department);
END LOOP;
END;
এখানে, JSON_TABLE ফাংশন ব্যবহার করে JSON ডেটা থেকে টেবিলের মতো রেকর্ড বের করা হচ্ছে। এটি JSON ডেটাকে SQL কোয়েরির আউটপুট হিসাবে রূপান্তরিত করে।
PL/SQL এর মাধ্যমে JSON ডেটা ম্যানেজমেন্টের সুবিধা:
- স্টোরেজ এবং অ্যাক্সেস: PL/SQL এবং Oracle Database JSON ডেটা স্টোর করতে সক্ষম, যা ডেটাবেসের অন্যান্য ডেটার মতোই সহজে ম্যানেজ করা যায়।
- JSON ডেটার সাথে SQL ইন্টিগ্রেশন: JSON ডেটাকে SQL কোয়েরি এবং PL/SQL লজিকের মধ্যে সংযুক্ত করা সহজ হয়, যা ডেটা ম্যানিপুলেশন এবং রিট্রিভাল আরও সহজ করে তোলে।
- Flexibility: JSON ডেটা নমনীয় এবং ডাইনামিক হওয়ায়, এটি অবজেক্ট-ওরিয়েন্টেড বা অন্যান্য স্ট্রাকচারড ডেটা মডেলের পরিবর্তে ব্যবহৃত হতে পারে।
- Performance: JSON ডেটার সাথে SQL কোয়েরি ব্যবহার করার মাধ্যমে বৃহত্তর ডেটাবেসে ডেটা অ্যাক্সেস ও ম্যানিপুলেশন উন্নত করা সম্ভব।
উপসংহার:
PL/SQL এ JSON ডেটা ম্যানেজমেন্ট একটি শক্তিশালী ফিচার, যা আপনাকে JSON ডেটাকে ডেটাবেসে সংরক্ষণ, প্রক্রিয়া, আপডেট এবং রিট্রিভ করার সুযোগ দেয়। JSON ডেটা ম্যানিপুলেশন সহজ এবং দ্রুততর করার জন্য বিভিন্ন ফাংশন ও টুলস উপলব্ধ, যেমন JSON_VALUE, JSON_QUERY, JSON_TABLE, ইত্যাদি। এটি ব্যবহারের মাধ্যমে আপনি ডেটাবেস অ্যাপ্লিকেশনগুলোকে আরও ফ্লেক্সিবল এবং কার্যকরী করতে পারেন।
Oracle PL/SQL-এ JSON ডেটা হ্যান্ডলিংয়ের জন্য বেশ কিছু শক্তিশালী ফাংশন রয়েছে, যার মধ্যে JSON_TABLE এবং JSON_QUERY প্রধান দুটি। এই ফাংশনগুলির মাধ্যমে JSON ডেটা সংগ্রহ, বিশ্লেষণ এবং সংরক্ষণ করা অনেক সহজ হয়ে যায়। এগুলি JSON ডেটাকে relational format এ কনভার্ট করতে সাহায্য করে এবং JSON ডেটার উপর বিভিন্ন অপারেশন করতে সক্ষম করে।
১. JSON_TABLE Function
JSON_TABLE ফাংশনটি একটি JSON ডকুমেন্টকে টেবিল ফরম্যাটে কনভার্ট করতে ব্যবহৃত হয়। এটি JSON ডেটা থেকে relational টেবিল তৈরি করে, যেখানে প্রতিটি JSON অবজেক্ট এক বা একাধিক রো হিসেবে রূপান্তরিত হয়।
Syntax:
JSON_TABLE (
json_expression, -- JSON ডকুমেন্ট বা এক্সপ্রেশন
path COLUMNS (
column_name FOR path_expression PATH 'json_path'
) [,...]
)
- json_expression: JSON ডেটা বা এক্সপ্রেশন যা JSON ডেটা থেকে টেবিল তৈরি করতে ব্যবহৃত হবে।
- path_expression: JSON ডেটার মধ্যে যে path অনুসন্ধান করতে হবে, সেটি।
- column_name: যে কলামের জন্য JSON ডেটা ম্যাপ করতে হবে, সেই নাম।
উদাহরণ:
ধরা যাক আমাদের কাছে একটি JSON ডেটা আছে যেখানে কর্মচারীদের তথ্য রয়েছে:
[
{"emp_id": 1, "name": "John", "department": "Sales", "salary": 5000},
{"emp_id": 2, "name": "Jane", "department": "Marketing", "salary": 6000},
{"emp_id": 3, "name": "Sam", "department": "HR", "salary": 4500}
]
এবার এই JSON ডেটাকে JSON_TABLE ফাংশন ব্যবহার করে টেবিল ফরম্যাটে কনভার্ট করা যাক:
SELECT *
FROM JSON_TABLE (
'[{"emp_id": 1, "name": "John", "department": "Sales", "salary": 5000},
{"emp_id": 2, "name": "Jane", "department": "Marketing", "salary": 6000},
{"emp_id": 3, "name": "Sam", "department": "HR", "salary": 4500}]',
'$[*]' COLUMNS (
emp_id NUMBER PATH '$.emp_id',
name VARCHAR2(100) PATH '$.name',
department VARCHAR2(100) PATH '$.department',
salary NUMBER PATH '$.salary'
)
) JT;
এই কোডটি JSON ডেটাকে টেবিল ফরম্যাটে কনভার্ট করবে এবং আমরা নিচের ফলাফল পাবো:
| EMP_ID | NAME | DEPARTMENT | SALARY |
|---|---|---|---|
| 1 | John | Sales | 5000 |
| 2 | Jane | Marketing | 6000 |
| 3 | Sam | HR | 4500 |
২. JSON_QUERY Function
JSON_QUERY ফাংশনটি JSON ডেটার মধ্যে নির্দিষ্ট তথ্য বের করতে ব্যবহৃত হয়। এটি JSON ডেটার অংশবিশেষ নির্বাচন করতে সাহায্য করে। বিশেষ করে, এই ফাংশনটি JSON ডেটাকে পুরোপুরি বা আংশিকভাবে ফেরত দিতে পারে।
Syntax:
JSON_QUERY (
json_expression, -- JSON ডেটা বা এক্সপ্রেশন
path -- JSON Path যে অংশটি নির্বাচন করতে হবে
[RETURNING clause] -- Optional: RETURNING "RAW" or "TEXT"
)
- json_expression: JSON ডেটা বা এক্সপ্রেশন, যা থেকে তথ্য বের করতে হবে।
- path: JSON ডেটার যে অংশে অনুসন্ধান করতে হবে, সেটি।
Return Types:
- TEXT: JSON ডেটার অংশটি আক্ষরিকভাবে ফেরত দেয়।
- RAW: JSON ডেটার অংশটি কোনও কোডেড বা টেবিল ফরম্যাটে ফেরত দেয়।
উদাহরণ:
ধরা যাক আমাদের কাছে নিম্নলিখিত JSON ডেটা রয়েছে:
{
"employee": {
"id": 1,
"name": "John",
"department": "Sales",
"address": {
"street": "1234 Elm St",
"city": "Metropolis"
}
}
}
এখন, যদি আমরা employee অবজেক্টের পুরো ডেটা বের করতে চাই, তবে আমরা JSON_QUERY ব্যবহার করতে পারি:
SELECT JSON_QUERY(
'{"employee": {"id": 1, "name": "John", "department": "Sales", "address": {"street": "1234 Elm St", "city": "Metropolis"}}}',
'$.employee'
) AS employee_info
FROM dual;
এখানে, আমরা employee অবজেক্টের সম্পূর্ণ তথ্য ফেরত পাবো।
ফলাফল:
{
"id": 1,
"name": "John",
"department": "Sales",
"address": {
"street": "1234 Elm St",
"city": "Metropolis"
}
}
আরেকটি উদাহরণ:
ধরা যাক, আমরা শুধুমাত্র address তথ্য বের করতে চাই:
SELECT JSON_QUERY(
'{"employee": {"id": 1, "name": "John", "department": "Sales", "address": {"street": "1234 Elm St", "city": "Metropolis"}}}',
'$.employee.address'
) AS employee_address
FROM dual;
ফলাফল:
{
"street": "1234 Elm St",
"city": "Metropolis"
}
JSON_QUERY এবং JSON_TABLE এর পার্থক্য
- JSON_TABLE: JSON ডেটাকে relational টেবিল ফরম্যাটে কনভার্ট করে, যা SQL queries এর মাধ্যমে সহজেই অ্যাক্সেস করা যায়।
- JSON_QUERY: JSON ডেটার নির্দিষ্ট অংশ বের করতে ব্যবহৃত হয়, তবে এটি JSON অবজেক্টের আউটপুট হিসেবে ফেরত দেয়।
উপসংহার
- JSON_TABLE ফাংশনটি JSON ডেটাকে টেবিল ফরম্যাটে কনভার্ট করতে ব্যবহৃত হয় এবং এতে SQL queries চালানো অনেক সহজ হয়ে যায়।
- JSON_QUERY ফাংশনটি JSON ডেটার নির্দিষ্ট অংশ বের করতে সাহায্য করে এবং এটি JSON ডেটার একটি আউটপুট প্রদান করে।
এই ফাংশনগুলির মাধ্যমে PL/SQL-এ JSON ডেটার সাথে আরও কার্যকরীভাবে কাজ করা সম্ভব, যেমন JSON ডেটা থেকে নির্দিষ্ট তথ্য বের করা এবং তা relational টেবিল ফরম্যাটে কনভার্ট করা।
Read more