PL/SQL-এ Cursor হলো একটি বিশেষ ধরনের ডেটা স্ট্রাকচার যা ডেটাবেস টেবিলের মধ্যে এক বা একাধিক রেকর্ড প্রক্রিয়া করতে ব্যবহৃত হয়। এটি আপনাকে ডেটার ওপর লুপ করতে এবং প্রতিটি রেকর্ডের ওপর নির্দিষ্ট কার্যক্রম সম্পাদন করতে সক্ষম করে। PL/SQL-এ দুটি প্রধান ধরনের Cursor ব্যবহৃত হয়: Implicit Cursor এবং Explicit Cursor। এই অংশে আমরা আলোচনা করব Cursor FOR Loop এবং Parameterized Cursor এর ব্যাপারে।
Cursor FOR Loop হল একটি সহজ এবং সুবিধাজনক উপায় যেখানে আমরা কোনো Cursors ঘোষণা না করেই একটি SELECT স্টেটমেন্টের মাধ্যমে ডেটা প্রক্রিয়া করতে পারি। Cursor FOR Loop স্বয়ংক্রিয়ভাবে Cursor খুলে, প্রতিটি রেকর্ডের জন্য লুপ করে এবং Cursor বন্ধ করে।
FOR record IN (SELECT column1, column2 FROM table_name WHERE condition) LOOP
-- Code to process each record
END LOOP;
এখানে, record
হলো একটি রেকর্ড টাইপ ভেরিয়েবল যা SELECT স্টেটমেন্টের প্রতিটি রেকর্ড ধারণ করে। column1
এবং column2
কেবলমাত্র উদাহরণ হিসেবে ব্যবহার করা হয়েছে, আপনি আপনার টেবিলের বাস্তব কলাম ব্যবহার করবেন।
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 হলো এমন একটি Cursor, যেটি আর্গুমেন্ট গ্রহণ করতে পারে। এটি explicit cursor হিসেবে ব্যবহৃত হয় এবং কেবল তখনই ব্যবহার করা হয় যখন আপনাকে একটি বা একাধিক মান ফিল্টার হিসেবে ব্যবহৃত করতে হয়। এটি আপনাকে ডাইনামিকভাবে একটি 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-এ ব্যবহৃত হবে।
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
টেবিল থেকে ডেটা প্রক্রিয়া করে এবং কনসোলে প্রদর্শন করে।
বৈশিষ্ট্য | Implicit Cursor | Explicit Cursor |
---|---|---|
ডিক্লারেশন | স্বয়ংক্রিয়ভাবে তৈরি হয়, আপনার ডিক্লারেশন প্রয়োজন হয় না | অবশ্যই ডিক্লারেশন করতে হয় |
ব্যবহার | সাধারণ SELECT, INSERT, UPDATE বা DELETE কাজের জন্য | কাস্টম কুয়েরি এবং ডেটা প্রক্রিয়া করার জন্য |
এটা কীভাবে ব্যবহৃত হয় | যখন আপনি সাধারণ কুয়েরি পরিচালনা করেন (যেমন, SELECT INTO ) | যখন আপনাকে কাস্টম কুয়েরি বা ডাইনামিক কুয়েরি চালাতে হয় |
কার্যকরিতা | দ্রুত এবং সহজ | উন্নত কন্ট্রোল এবং কাস্টমাইজেশন |
উল্লেখযোগ্য যে, Cursor FOR Loop সাধারণত ছোট এবং সহজ কুয়েরির জন্য ব্যবহার করা হয়, যেখানে Parameterized Cursor ডাইনামিক কুয়েরি এবং বেশি জটিল পরিস্থিতির জন্য উপযুক্ত।
Read more