Collections হল একটি ধরনের ডেটা স্ট্রাকচার যা একাধিক মান (value) ধারণ করতে পারে। PL/SQL-এ Collections ব্যবহৃত হয় যাতে একাধিক ডেটা আইটেম একসাথে রাখা যায় এবং কার্যকরভাবে প্রক্রিয়া করা যায়। Collections প্রধানত তিনটি ধরনের হয়ে থাকে:
- Associative Arrays (Index-By Tables)
- Nested Tables
- Varrays (Variable-size arrays)
এগুলির সাথে সম্পর্কিত একটি গুরুত্বপূর্ণ কনসেপ্ট হল Bulk Operations, যা নগণ্য পরিমাণ ডেটা একসাথে প্রক্রিয়া করার জন্য ব্যবহৃত হয়। Bulk Operations আপনাকে একাধিক রেকর্ডকে একসাথে প্রক্রিয়া করার সুবিধা দেয়, যেটি সাধারণ লুপ ব্যবহার করার চেয়ে অনেক দ্রুত এবং কার্যকর।
PL/SQL Collections: প্রকার
1. Associative Arrays (Index-By Tables)
- Associative Arrays হল একটি বিশেষ ধরনের অ্যারে যা ইন্ডেক্স হিসেবে স্ট্রিং বা পজিটিভ ইন্টিজার ব্যবহার করে। এগুলি মূলত ডাইনামিক অ্যারে হিসেবে কাজ করে।
- এগুলি ডেটাবেস টেবিল এর মতো কাজ করে এবং ব্যবহারকারীর প্রয়োজন অনুসারে ডেটার সংখ্যা পরিবর্তন করা যায়।
উদাহরণ:
DECLARE
TYPE emp_array IS TABLE OF employees%ROWTYPE INDEX BY BINARY_INTEGER;
emp_details emp_array;
BEGIN
SELECT * INTO emp_details(1)
FROM employees
WHERE employee_id = 100;
DBMS_OUTPUT.PUT_LINE(emp_details(1).first_name);
END;
2. Nested Tables
- Nested Tables হল এমন একটি কলেকশন টাইপ যা টেবিলের মতো কাজ করে এবং অন্যান্য টেবিলের মধ্যে ইনসার্ট করা যায়।
- Nested Table ব্যবহার করলে আপনি প্রতিটি আইটেম আলাদা আলাদা হিসেবে প্রক্রিয়া করতে পারেন, এবং এটা ডেটাবেসে টেবিলের মতো কাজ করে।
উদাহরণ:
DECLARE
TYPE emp_table IS TABLE OF employees%ROWTYPE;
emp_details emp_table;
BEGIN
SELECT * BULK COLLECT INTO emp_details
FROM employees
WHERE department_id = 10;
FOR i IN 1 .. emp_details.COUNT LOOP
DBMS_OUTPUT.PUT_LINE(emp_details(i).first_name);
END LOOP;
END;
3. Varrays (Variable-size Arrays)
- Varrays হল একটি অফিসিয়াল অ্যারে টাইপ, যার আকার একটি নির্দিষ্ট সীমা পর্যন্ত স্থির থাকে। এই ধরনের অ্যারে আপনাকে একটি সীমিত সংখ্যা ডেটা ধারণ করতে সাহায্য করে।
- এগুলি ডাইনামিক অ্যারে এর মতো কাজ করে তবে ফিক্সড সাইজ এর সুবিধা প্রদান করে।
উদাহরণ:
DECLARE
TYPE num_array IS VARRAY(10) OF NUMBER;
numbers num_array := num_array(10, 20, 30);
BEGIN
FOR i IN 1 .. numbers.LAST LOOP
DBMS_OUTPUT.PUT_LINE(numbers(i));
END LOOP;
END;
PL/SQL Bulk Operations
PL/SQL-এ Bulk Operations ব্যবহার করে আপনি একাধিক ডেটাকে একই সাথে প্রক্রিয়া করতে পারেন, যা পারফরম্যান্সের জন্য গুরুত্বপূর্ণ। এটি BULK COLLECT এবং FORALL এর মাধ্যমে সম্ভব হয়।
1. BULK COLLECT
BULK COLLECT আপনাকে একাধিক রেকর্ড একসাথে সংগ্রহ (fetch) করার জন্য ব্যবহৃত হয়। এটি সাধারণত SELECT স্টেটমেন্টের সাথে ব্যবহার করা হয় এবং একই সময়ে অনেক রেকর্ড প্রাপ্ত করার মাধ্যমে কোডের কার্যকারিতা বৃদ্ধি করে।
সিনট্যাক্স:
SELECT column_name BULK COLLECT INTO collection_name
FROM table_name
WHERE condition;
উদাহরণ:
DECLARE
TYPE emp_table IS TABLE OF employees%ROWTYPE;
emp_details emp_table;
BEGIN
SELECT * BULK COLLECT INTO emp_details
FROM employees
WHERE department_id = 10;
FOR i IN 1 .. emp_details.COUNT LOOP
DBMS_OUTPUT.PUT_LINE(emp_details(i).first_name);
END LOOP;
END;
এখানে, BULK COLLECT ব্যবহার করে আমরা একসাথে সমস্ত কর্মচারীর ডেটা emp_details কলে সন্নিবেশিত করেছি, যা লুপের মাধ্যমে প্রদর্শন করা হয়েছে।
2. FORALL
FORALL হল একটি অপারেটর যা একসাথে অনেক DML (Data Manipulation Language) অপারেশন করতে ব্যবহৃত হয়। এটি INSERT, UPDATE, বা DELETE অপারেশনকে একত্রে একাধিক রেকর্ড এর উপর কার্যকর করতে সাহায্য করে, যা পারফরম্যান্সের জন্য অনেক উপকারী।
সিনট্যাক্স:
FORALL index IN lower_bound..upper_bound
DML_statement;
উদাহরণ:
DECLARE
TYPE emp_array IS TABLE OF employees%ROWTYPE;
emp_details emp_array;
BEGIN
SELECT * BULK COLLECT INTO emp_details
FROM employees
WHERE department_id = 10;
FORALL i IN 1 .. emp_details.COUNT
UPDATE employees
SET salary = salary * 1.10
WHERE employee_id = emp_details(i).employee_id;
END;
এখানে, আমরা BULK COLLECT এর মাধ্যমে emp_details অ্যারেতে ডেটা সংগ্রহ করেছি এবং তারপরে FORALL ব্যবহার করে একসাথে সমস্ত কর্মচারীর বেতন আপডেট করেছি।
Bulk Operations এর সুবিধা
- পারফরম্যান্স বৃদ্ধি: সাধারণ লুপের চেয়ে Bulk Operations অনেক দ্রুত কাজ করে, কারণ এটি একাধিক ডেটা একসাথে প্রক্রিয়া করে।
- কোডের সহজতা: Bulk Operations আপনাকে কম কোড লিখে বৃহৎ পরিমাণ ডেটা প্রসেস করার সুযোগ দেয়।
- কম CPU এবং I/O খরচ: একাধিক রেকর্ড প্রসেস করা হয়ে থাকে একাধিক আলাদা স্টেটমেন্টের পরিবর্তে একক স্টেটমেন্টে, যা CPU এবং I/O খরচ কমাতে সাহায্য করে।
Bulk Operations এর সঠিক ব্যবহার
- Memory Management: যেহেতু Bulk Collect একসাথে অনেক ডেটা একত্র করে, তাই খুব বেশি ডেটা সংগ্রহ করার সময় এটি
OUT OF MEMORYএর সমস্যা সৃষ্টি করতে পারে। তাই ডেটা সংগ্রহের পরিমাণ নিয়ন্ত্রণ করা গুরুত্বপূর্ণ। Error Handling: Bulk Operations-এ যখন একাধিক রেকর্ড প্রক্রিয়া করা হয়, তখন একটি ত্রুটি ঘটলে তা পুরো ব্যাচের উপর প্রভাব ফেলতে পারে।
SAVE EXCEPTIONSব্যবহার করে কিছু ত্রুটি এড়ানো যেতে পারে।উদাহরণ:
DECLARE TYPE emp_array IS TABLE OF employees%ROWTYPE; emp_details emp_array; PRAGMA AUTONOMOUS_TRANSACTION; BEGIN SELECT * BULK COLLECT INTO emp_details FROM employees; FORALL i IN 1 .. emp_details.COUNT UPDATE employees SET salary = salary + 500 WHERE employee_id = emp_details(i).employee_id; COMMIT; END;
উপসংহার
PL/SQL এ Collections এবং Bulk Operations ডেটাবেসের সাথে কার্যকরভাবে কাজ করার জন্য একটি শক্তিশালী টুল। Associative Arrays, Nested Tables, এবং Varrays দিয়ে একাধিক ডেটা সংগ্রহ এবং প্রক্রিয়া করার মাধ্যমে আপনার অ্যাপ্লিকেশন এর পারফরম্যান্স অনেক উন্নত করা যেতে পারে। BULK COLLECT এবং FORALL এর মাধ্যমে আপনি অনেক দ্রুত ডেটাবেস অপারেশন করতে পারবেন, যা উচ্চমানের কর্মক্ষমতা এবং দক্ষতা প্রদান করবে।
Read more