PL/SQL-এ Cursor হলো একটি বিশেষ ধরনের ডেটা স্ট্রাকচার যা ডেটাবেস টেবিলের মধ্যে এক বা একাধিক রেকর্ড প্রক্রিয়া করতে ব্যবহৃত হয়। এটি আপনাকে ডেটার ওপর লুপ করতে এবং প্রতিটি রেকর্ডের ওপর নির্দিষ্ট কার্যক্রম সম্পাদন করতে সক্ষম করে। PL/SQL-এ দুটি প্রধান ধরনের Cursor ব্যবহৃত হয়: Implicit Cursor এবং Explicit Cursor। এই অংশে আমরা আলোচনা করব Cursor FOR Loop এবং Parameterized Cursor এর ব্যাপারে।
১. Cursor FOR Loop
Cursor FOR Loop হল একটি সহজ এবং সুবিধাজনক উপায় যেখানে আমরা কোনো Cursors ঘোষণা না করেই একটি SELECT স্টেটমেন্টের মাধ্যমে ডেটা প্রক্রিয়া করতে পারি। Cursor FOR Loop স্বয়ংক্রিয়ভাবে Cursor খুলে, প্রতিটি রেকর্ডের জন্য লুপ করে এবং Cursor বন্ধ করে।
Cursor FOR Loop গঠন:
FOR record IN (SELECT column1, column2 FROM table_name WHERE condition) LOOP
-- Code to process each record
END LOOP;
এখানে, record হলো একটি রেকর্ড টাইপ ভেরিয়েবল যা SELECT স্টেটমেন্টের প্রতিটি রেকর্ড ধারণ করে। column1 এবং column2 কেবলমাত্র উদাহরণ হিসেবে ব্যবহার করা হয়েছে, আপনি আপনার টেবিলের বাস্তব কলাম ব্যবহার করবেন।
Cursor FOR Loop উদাহরণ:
DECLARE
-- No need to explicitly declare a cursor
BEGIN
FOR employee IN (SELECT employee_id, first_name, last_name, salary FROM employees WHERE department_id = 10) LOOP
DBMS_OUTPUT.PUT_LINE('Employee ID: ' || employee.employee_id || ', Name: ' || employee.first_name || ' ' || employee.last_name || ', Salary: ' || employee.salary);
END LOOP;
END;
এখানে, FOR employee IN (SELECT ...) LOOP একটি Cursor FOR Loop, যা employees টেবিল থেকে department_id = 10 এর মধ্যে সকল কর্মচারীর তথ্য প্রক্রিয়া করছে। প্রতিটি রেকর্ডের জন্য, তা কনসোলে প্রদর্শিত হবে।
২. Parameterized Cursor
Parameterized Cursor হলো এমন একটি Cursor, যেটি আর্গুমেন্ট গ্রহণ করতে পারে। এটি explicit cursor হিসেবে ব্যবহৃত হয় এবং কেবল তখনই ব্যবহার করা হয় যখন আপনাকে একটি বা একাধিক মান ফিল্টার হিসেবে ব্যবহৃত করতে হয়। এটি আপনাকে ডাইনামিকভাবে একটি Cursor তৈরি এবং ব্যবহার করতে সক্ষম করে।
Parameterized Cursor গঠন:
DECLARE
CURSOR cursor_name (param1 datatype1, param2 datatype2) IS
SELECT column1, column2
FROM table_name
WHERE condition1 = param1 AND condition2 = param2;
BEGIN
-- Cursor usage goes here
END;
এখানে, cursor_name একটি নাম যেটি আপনি আপনার cursor-এর জন্য নির্বাচন করবেন এবং param1, param2 হলো প্যারামিটার যা এই cursor-এ ব্যবহৃত হবে।
Parameterized Cursor উদাহরণ:
DECLARE
-- Declare a cursor with parameters
CURSOR employee_cursor (dept_id NUMBER) IS
SELECT employee_id, first_name, last_name, salary
FROM employees
WHERE department_id = dept_id;
-- Variable to hold department ID
v_dept_id NUMBER := 10;
BEGIN
-- Open the cursor with the parameter value (department_id = 10)
FOR emp_record IN employee_cursor(v_dept_id) LOOP
DBMS_OUTPUT.PUT_LINE('Employee ID: ' || emp_record.employee_id || ', Name: ' || emp_record.first_name || ' ' || emp_record.last_name || ', Salary: ' || emp_record.salary);
END LOOP;
END;
এখানে, employee_cursor একটি parameterized cursor, যেখানে dept_id একটি প্যারামিটার হিসেবে নেওয়া হয়েছে। যখন আমরা employee_cursor(v_dept_id) কল করি, তখন এটি dept_id = 10 এর ভিত্তিতে employees টেবিল থেকে ডেটা প্রক্রিয়া করে এবং কনসোলে প্রদর্শন করে।
৩. Parameterized Cursor এর সুবিধা
- পুনঃব্যবহারযোগ্যতা: Parameterized Cursor-এ প্যারামিটার ব্যবহার করে একই Cursor বিভিন্ন পরিস্থিতিতে ব্যবহার করা যায়।
- ফিল্টারিং এবং ডাইনামিক কুয়েরি: আপনি বিভিন্ন আর্গুমেন্টের ভিত্তিতে কুয়েরি ফিল্টার করতে পারেন, যা কুয়েরিকে আরো বেশি ডাইনামিক এবং নমনীয় করে তোলে।
- কোডের সুশৃঙ্খলতা: Parameterized Cursor আপনাকে কোডের পুনঃব্যবহারযোগ্যতা এবং সুশৃঙ্খলতা বজায় রাখতে সাহায্য করে।
৪. Implicit Cursor vs Explicit Cursor
| বৈশিষ্ট্য | Implicit Cursor | Explicit Cursor |
|---|---|---|
| ডিক্লারেশন | স্বয়ংক্রিয়ভাবে তৈরি হয়, আপনার ডিক্লারেশন প্রয়োজন হয় না | অবশ্যই ডিক্লারেশন করতে হয় |
| ব্যবহার | সাধারণ SELECT, INSERT, UPDATE বা DELETE কাজের জন্য | কাস্টম কুয়েরি এবং ডেটা প্রক্রিয়া করার জন্য |
| এটা কীভাবে ব্যবহৃত হয় | যখন আপনি সাধারণ কুয়েরি পরিচালনা করেন (যেমন, SELECT INTO) | যখন আপনাকে কাস্টম কুয়েরি বা ডাইনামিক কুয়েরি চালাতে হয় |
| কার্যকরিতা | দ্রুত এবং সহজ | উন্নত কন্ট্রোল এবং কাস্টমাইজেশন |
সারাংশ:
- Cursor FOR Loop একটি সহজ এবং সুবিধাজনক উপায়, যা Explicit Cursor ছাড়াই ডেটা প্রক্রিয়া করতে সাহায্য করে। এটি SELECT স্টেটমেন্টের সাথে কাজ করে এবং স্বয়ংক্রিয়ভাবে Cursor পরিচালনা করে।
- Parameterized Cursor একটি উন্নত উপায়, যা আর্গুমেন্ট গ্রহণ করে এবং ডাইনামিকভাবে কুয়েরি পরিচালনা করে। এটি সাধারণত যখন একই কুয়েরি বিভিন্ন প্যারামিটার নিয়ে কাজ করতে হয় তখন ব্যবহৃত হয়।
উল্লেখযোগ্য যে, Cursor FOR Loop সাধারণত ছোট এবং সহজ কুয়েরির জন্য ব্যবহার করা হয়, যেখানে Parameterized Cursor ডাইনামিক কুয়েরি এবং বেশি জটিল পরিস্থিতির জন্য উপযুক্ত।
Read more