Collections হল PL/SQL-এর একটি গুরুত্বপূর্ণ বৈশিষ্ট্য, যা একাধিক মান বা ডেটা একত্রে সংরক্ষণ এবং পরিচালনা করার জন্য ব্যবহৃত হয়। এটি বিশেষভাবে উপকারী যখন আপনাকে একাধিক রেকর্ড বা মান একত্রে কাজ করতে হয়।
PL/SQL-এ Collections তিন ধরনের হতে পারে:
- Associative Arrays (Index-By Tables)
- Nested Tables
- VARRAYs (Variable-Size Arrays)
প্রতিটি প্রকারের Collection এর আলাদা বৈশিষ্ট্য ও ব্যবহার রয়েছে।
১. Associative Arrays (Index-By Tables)
Associative Arrays হল একটি collection যা ইন্ডেক্স (key) এর মাধ্যমে ডেটা অ্যাক্সেস করতে পারে, এবং এটি এমনভাবে ডিজাইন করা যাতে এর ইনডেক্স পজিশন নম্বর হতে পারে না, বরং এটি যেকোনো ডেটা টাইপ হতে পারে (যেমন, সংখ্যা, স্ট্রিং ইত্যাদি)। এটি একাধিক মান সংরক্ষণ করতে ব্যবহৃত হয় যেখানে ইনডেক্সটি একটি কাস্টম মান হতে পারে।
Associative Arrays এর উদাহরণ:
DECLARE
TYPE emp_table_type IS TABLE OF employees.employee_name%TYPE INDEX BY VARCHAR2(10);
emp_names emp_table_type;
BEGIN
emp_names('E101') := 'Alice';
emp_names('E102') := 'Bob';
emp_names('E103') := 'Charlie';
DBMS_OUTPUT.PUT_LINE('Employee with ID E102: ' || emp_names('E102'));
END;
এখানে, emp_names একটি Associative Array, যেখানে E101, E102, ইত্যাদি হল ইনডেক্স এবং তাদের মান হল সংশ্লিষ্ট কর্মচারীদের নাম।
২. Nested Tables
Nested Tables একটি collection যা একধরণের সারণির মতো কাজ করে। এটি একাধিক মান সংরক্ষণ করতে সক্ষম, তবে এগুলি একটি ধারাবাহিক একক সারণির মধ্যে স্টোর হয়। Nested Tables সাধারণত ডাটাবেস টেবিলের মতোই আচরণ করে এবং এগুলি পুনরুদ্ধার ও আপডেট করার জন্য SQL ব্যবহার করা যায়।
Nested Tables এর উদাহরণ:
DECLARE
TYPE number_table IS TABLE OF NUMBER;
num_list number_table := number_table(10, 20, 30, 40);
BEGIN
FOR i IN 1..num_list.COUNT LOOP
DBMS_OUTPUT.PUT_LINE('Number: ' || num_list(i));
END LOOP;
END;
এখানে, num_list একটি Nested Table যা একাধিক সংখ্যা ধারণ করছে, এবং FOR লুপের মাধ্যমে সেগুলি একে একে আউটপুট হিসেবে প্রদর্শিত হচ্ছে।
৩. VARRAYs (Variable-Size Arrays)
VARRAYs (Variable-size arrays) হল একটি collection যেখানে ফিক্সড সংখ্যক উপাদান থাকে, এবং এর আকার নির্দিষ্ট সংখ্যার বেশি হলে ডেটা স্বয়ংক্রিয়ভাবে প্রসারিত হতে পারে। VARRAYs সাধারণত ছোট আকারের বা সীমিত পরিসরের জন্য ব্যবহার করা হয়।
VARRAYs এর উদাহরণ:
DECLARE
TYPE num_varray IS VARRAY(5) OF NUMBER;
num_list num_varray := num_varray(10, 20, 30);
BEGIN
FOR i IN 1..num_list.LIMIT LOOP
DBMS_OUTPUT.PUT_LINE('Number: ' || num_list(i));
END LOOP;
END;
এখানে, num_list একটি VARRAY যা ৫টি সংখ্যার মধ্যে সীমাবদ্ধ।
Collections কেন প্রয়োজন?
PL/SQL-এ Collections ব্যবহারের অনেক কারণ এবং সুবিধা রয়েছে, যা বিভিন্ন পরিস্থিতিতে অত্যন্ত কার্যকরী।
1. একাধিক মান সংরক্ষণ:
Collections আপনাকে একাধিক ডেটা মান একত্রে সংরক্ষণ করতে সাহায্য করে। এটি এমন পরিস্থিতিতে ব্যবহৃত হয় যেখানে আপনি একাধিক রেকর্ড বা ভ্যালু সংরক্ষণ করতে চান, যেমন লুপের ভিতরে একাধিক মান রাখতে।
2. ডেটা ম্যানিপুলেশন:
Collections ব্যবহার করে আপনি একাধিক ডেটা মানের উপর একযোগে কাজ করতে পারেন, যেমন একাধিক আইটেমকে ফিল্টার করা, পরিসংখ্যান হিসাব করা, অথবা সমষ্টি বের করা।
3. সঞ্চালন প্রক্রিয়া সহজ করা:
ব্যাপক ডেটা ম্যানিপুলেশন বা কার্যকরী কর্মধারা সম্পাদন করতে Collections সহায়ক। যেমন, একাধিক ডেটা ফেচ করা হলে, সেটি একটি Collection এ সঞ্চিত করা হয় এবং পরে তার উপরে কার্যক্রম পরিচালনা করা হয়।
4. কর্মক্ষমতা উন্নত করা:
Collections ব্যবহার করে একাধিক রেকর্ড একত্রে প্রক্রিয়া করা যেতে পারে, যা কার্যক্ষমতা বাড়াতে সাহায্য করে। উদাহরণস্বরূপ, BULK COLLECT এবং FORALL ব্যবহার করা যেতে পারে Collections-এ ডেটা দ্রুতভাবে হ্যান্ডেল করতে।
5. কোড সিম্পলিফিকেশন:
Collections কোডের জটিলতা কমিয়ে আনতে সহায়তা করে, কারণ এতে একাধিক ভেরিয়েবল বা তত্ত্ব একসাথে পরিচালনা করা সহজ হয়ে যায়।
6. ফ্লেক্সিবিলিটি:
Collections বিভিন্ন ধরনের ডেটা ধারণ করতে সক্ষম (যেমন সংখ্যা, স্ট্রিং, অবজেক্ট ইত্যাদি), এবং এগুলির আকার এবং ধারণ ক্ষমতা ডাইনামিকভাবে পরিবর্তিত হতে পারে।
Collections এর ব্যবহারী উদাহরণ
- একাধিক রেকর্ড প্রক্রিয়া করা:
DECLARE
TYPE emp_table IS TABLE OF employees.employee_name%TYPE;
emp_names emp_table;
BEGIN
-- ডেটা ফেচ করা
SELECT employee_name
BULK COLLECT INTO emp_names
FROM employees
WHERE department_id = 10;
-- প্রতিটি কর্মচারীর নাম আউটপুট করা
FOR i IN 1..emp_names.COUNT LOOP
DBMS_OUTPUT.PUT_LINE('Employee Name: ' || emp_names(i));
END LOOP;
END;
এখানে, BULK COLLECT ব্যবহৃত হয়েছে যাতে একাধিক কর্মচারীর নাম একসাথে emp_names collection-এ সংরক্ষণ করা যায়, এবং পরে সেই ডেটার উপর লুপ চালিয়ে তাদের আউটপুট দেখানো হয়েছে।
- গ্রুপিং বা সোজানো (Sorting) করা:
DECLARE
TYPE emp_table IS TABLE OF employees.employee_name%TYPE;
emp_names emp_table;
BEGIN
-- ডেটা ফেচ করা
SELECT employee_name
BULK COLLECT INTO emp_names
FROM employees
WHERE department_id = 10
ORDER BY employee_name;
-- নামগুলির তালিকা আউটপুট করা
FOR i IN 1..emp_names.COUNT LOOP
DBMS_OUTPUT.PUT_LINE('Employee Name: ' || emp_names(i));
END LOOP;
END;
এখানে, ORDER BY দিয়ে আউটপুটের ডেটা অর্ডার করা হয়েছে এবং তা emp_names collection-এ সংরক্ষণ করা হয়েছে।
সারাংশ:
- Collections হল PL/SQL-এ একাধিক মান বা ডেটা একত্রে সংরক্ষণ এবং পরিচালনা করার একটি শক্তিশালী বৈশিষ্ট্য।
- এটি আপনাকে বিভিন্ন ডেটা প্রক্রিয়াকরণ, ম্যানিপুলেশন, এবং কার্যক্ষমতা বৃদ্ধি করতে সহায়তা করে।
- PL/SQL-এ তিন ধরনের Collections রয়েছে: Associative Arrays, Nested Tables, এবং VARRAYs।
- Collections ব্যবহার করে আপনি একাধিক রেকর্ড দ্রুত এবং কার্যকরভাবে প্রক্রিয়া করতে পারেন, এবং কোডের জটিলতা কমাতে সাহায্য পেতে পারেন।
Read more