PL/SQL এর Cursor একটি ডেটা-স্ট্রাকচার যা ডেটাবেস থেকে একাধিক সারি (rows) নিয়ে কাজ করতে সহায়ক। যখন SQL কোয়েরি একাধিক রেকর্ড রিটার্ন করে, তখন সেই রেকর্ডগুলির সাথে একে একে কাজ করতে কিউরসর ব্যবহার করা হয়। কিউরসর মূলত একটি pointer হিসেবে কাজ করে যা একে একে রেকর্ডগুলোকে প্রসেস করতে সাহায্য করে।
Cursor এর প্রয়োজনীয়তা:
- Multiple Rows Process করা: সাধারণ SQL স্টেটমেন্টের মাধ্যমে একাধিক সারি থেকে ডেটা নির্বাচিত করা যায়, কিন্তু যদি আপনি সেগুলি একে একে প্রক্রিয়া করতে চান, তবে কিউরসর অপরিহার্য। এটি একসাথে একাধিক সারির সাথে কাজ করতে সক্ষম।
- ফলস্বরূপ সহজতর ব্যবহার: যখন আপনি একটি SQL কুইরি চালান এবং ফলাফলগুলি একাধিক সারির মধ্যে বিভক্ত হয়, তখন কিউরসর সেই সারিগুলি লুপে ব্যবহার করে প্রতিটি রেকর্ডের উপর কাজ করতে সহায়ক।
- Memory Management: Cursor গুলি সারির উপর কাজ করার সময় মেমোরি ব্যবস্থাপনায় সহায়ক। এটি শুধুমাত্র প্রয়োজনীয় রেকর্ড মেমোরিতে লোড করে রাখে, অতিরিক্ত রেকর্ডকে নয়।
- ডাইনামিক প্রসেসিং: কিউরসর ব্যবহার করে ডাইনামিকভাবে রেকর্ডের উপর কাজ করা যায়, যেখানে সারির সংখ্যা এবং ভ্যালু পরিবর্তিত হতে পারে।
Cursor এর ধরন:
Implicit Cursor (অপ্রকাশিত কিউরসর):
- বর্ণনা: SQL কুইরি যখন প্ল/এসকিউএল ব্লকের মাধ্যমে রান হয়, তখন অটোমেটিক্যালি একটি Implicit Cursor তৈরি হয়। ডেটাবেসের দ্বারা তৈরি হয় এবং এটি ব্যবহারকারীর জন্য দৃশ্যমান না।
- প্রয়োজনীয়তা: যখন আপনি সাধারণ SQL কুইরি চালান, যেমন
SELECT,INSERT,UPDATE,DELETE, তখন Implicit Cursor ব্যবহৃত হয়।
উদাহরণ:
BEGIN UPDATE employees SET salary = salary * 1.1 WHERE department_id = 10; END;Explicit Cursor (প্রকাশিত কিউরসর):
- বর্ণনা: এটি ব্যবহারকারীর দ্বারা ডিফাইন করা কিউরসর। Explicit Cursor ব্যবহার করে আপনি একাধিক সারি নিয়ে কাজ করতে পারেন এবং সারির মধ্যে একে একে প্রক্রিয়া করতে পারেন।
- প্রয়োজনীয়তা: যখন আপনাকে একাধিক সারি নিয়ে লুপ চালিয়ে কাস্টম লজিক প্রয়োগ করতে হয়, তখন Explicit Cursor ব্যবহৃত হয়।
Explicit Cursor গঠন:
DECLARE CURSOR cursor_name IS SELECT column_name FROM table_name WHERE condition; record_name cursor_name%ROWTYPE; BEGIN OPEN cursor_name; FETCH cursor_name INTO record_name; WHILE cursor_name%FOUND LOOP -- Process the fetched record DBMS_OUTPUT.PUT_LINE(record_name.column_name); FETCH cursor_name INTO record_name; END LOOP; CLOSE cursor_name; END;
Cursor এর ব্যবহার:
- Cursor Open: Cursor কে
OPENকরলে সেটি ডাটাবেসের সাথে যুক্ত হয় এবং কুইরি রেজাল্টগুলো লোড হয়। - Cursor Fetch:
FETCHকমান্ডের মাধ্যমে একে একে রেকর্ড পাওয়া যায় এবং তা লুপের মাধ্যমে প্রক্রিয়া করা হয়। - Cursor Close: যখন কিউরসর আর প্রয়োজন হয় না, তখন সেটিকে
CLOSEকরা হয় যাতে মেমোরি সাশ্রয় হয়।
Cursor Attributes:
- %FOUND: এটি দেখায় যে, কিউরসরটি কোন রেকর্ড পেয়েছে কিনা।
- %NOTFOUND: এটি দেখায় যে, কিউরসরটি কোন রেকর্ড পায়নি।
- %ROWCOUNT: এটি জানায় কতটি রেকর্ড ফেচ করা হয়েছে।
- %ISOPEN: এটি জানায় যে, কিউরসরটি বর্তমানে খোলা আছে কিনা।
Cursor এর উদাহরণ:
DECLARE
CURSOR employee_cursor IS
SELECT employee_id, first_name, last_name FROM employees WHERE department_id = 10;
emp_record employee_cursor%ROWTYPE;
BEGIN
OPEN employee_cursor;
LOOP
FETCH employee_cursor INTO emp_record;
EXIT WHEN employee_cursor%NOTFOUND;
DBMS_OUTPUT.PUT_LINE('Employee ID: ' || emp_record.employee_id || ', Name: ' || emp_record.first_name || ' ' || emp_record.last_name);
END LOOP;
CLOSE employee_cursor;
END;
এখানে, employee_cursor কিউরসর ব্যবহার করে ডিপার্টমেন্ট আইডি ১০ এর সকল কর্মচারীর তথ্য প্রিন্ট করা হচ্ছে।
সারাংশ:
- Cursor ডেটাবেসে একাধিক সারির উপর কাজ করার জন্য একটি শক্তিশালী টুল।
- Implicit Cursor সাধারণ SQL কুইরির জন্য ব্যবহৃত হয়, এবং Explicit Cursor বেশি কাস্টমাইজড এবং জটিল কুইরির জন্য ব্যবহৃত হয়।
- Cursor Attributes এর মাধ্যমে কিউরসরটির অবস্থান ও ডেটা প্রক্রিয়াকরণের তথ্য পাওয়া যায়।
Content added By
Read more