PL/SQL এ Predefined Exceptions হলো কিছু নির্দিষ্ট ত্রুটি যা Oracle Database দ্বারা স্বয়ংক্রিয়ভাবে তৈরি এবং পরিচালিত হয়। এই exceptions গুলি সাধারণত এমন পরিস্থিতিতে ঘটে, যেগুলি সাধারণত ডেটাবেসের সাথে সম্পর্কিত বা SQL এর সাথে সম্পৃক্ত ত্রুটি। এগুলি handling করার জন্য আপনাকে EXCEPTION ব্লক ব্যবহার করতে হবে।
Oracle PL/SQL এ কিছু গুরুত্বপূর্ণ predefined exceptions এর মধ্যে অন্যতম হল NO_DATA_FOUND এবং TOO_MANY_ROWS।
১. NO_DATA_FOUND Exception
NO_DATA_FOUND exception তখন ঘটে, যখন একটি SELECT INTO স্টেটমেন্ট কোনো রেকর্ড ফেরত না দেয়। এই exception সাধারণত ব্যবহৃত হয় যখন আমরা একক রেকর্ড পেতে আশা করি, কিন্তু কোন রেকর্ড পাওয়া যায় না।
উদাহরণ:
DECLARE
v_employee_name VARCHAR2(100);
BEGIN
-- Trying to fetch employee name by ID
SELECT employee_name INTO v_employee_name
FROM employees
WHERE employee_id = 999; -- Assume no employee with ID 999 exists
DBMS_OUTPUT.PUT_LINE('Employee Name: ' || v_employee_name);
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('No employee found with the given ID');
END;
এখানে, যদি employee_id = 999 এর জন্য কোনো রেকর্ড না থাকে, তবে NO_DATA_FOUND exception ঘটবে এবং No employee found with the given ID বার্তা প্রদর্শিত হবে।
NO_DATA_FOUND এর ব্যবহার:
- এটি সাধারণত SELECT INTO স্টেটমেন্টে ব্যবহার করা হয় যখন একক রেকর্ডের জন্য ডেটা প্রত্যাশিত থাকে।
SELECT INTOএর মাধ্যমে যদি কোনো রেকর্ড না পাওয়া যায়, তাহলে এই exception সংঘটিত হয়।
২. TOO_MANY_ROWS Exception
TOO_MANY_ROWS exception তখন ঘটে, যখন একটি SELECT INTO স্টেটমেন্ট একাধিক রেকর্ড ফেরত দেয়, কিন্তু আপনি শুধু একক রেকর্ড আশা করেছিলেন। অর্থাৎ, যখন আপনার SELECT স্টেটমেন্ট একাধিক রেকর্ড রিটার্ন করে, তখন এটি একটি ত্রুটি তৈরি করে।
উদাহরণ:
DECLARE
v_employee_name VARCHAR2(100);
BEGIN
-- Trying to fetch employee name, but expecting only one employee with the same name
SELECT employee_name INTO v_employee_name
FROM employees
WHERE employee_name = 'John Doe'; -- Assume more than one employee with this name
DBMS_OUTPUT.PUT_LINE('Employee Name: ' || v_employee_name);
EXCEPTION
WHEN TOO_MANY_ROWS THEN
DBMS_OUTPUT.PUT_LINE('More than one employee found with the same name');
END;
এখানে, যদি employee_name = 'John Doe' এর জন্য একাধিক রেকর্ড থাকে, তবে TOO_MANY_ROWS exception ঘটবে এবং More than one employee found with the same name বার্তা প্রদর্শিত হবে।
TOO_MANY_ROWS এর ব্যবহার:
- এটি সাধারণত SELECT INTO স্টেটমেন্টে ব্যবহার করা হয়, যখন আপনি একক রেকর্ডের প্রত্যাশা করেন কিন্তু SELECT স্টেটমেন্ট একাধিক রেকর্ড রিটার্ন করে।
৩. অন্যান্য Predefined Exceptions
Oracle PL/SQL এ আরও কিছু predefined exceptions রয়েছে, যেগুলি সাধারণ ডেটাবেস ত্রুটির সাথে সম্পর্কিত। যেমন:
৩.১. ZERO_DIVIDE:
এটি ঘটে যখন আপনি 0 দ্বারা ভাগ করার চেষ্টা করেন।
DECLARE
v_result NUMBER;
BEGIN
v_result := 10 / 0; -- Division by zero
EXCEPTION
WHEN ZERO_DIVIDE THEN
DBMS_OUTPUT.PUT_LINE('Cannot divide by zero');
END;
৩.২. INVALID_CURSOR:
এটি ঘটে যখন আপনি একটি কুর্সর ব্যবহার করার চেষ্টা করেন যা খোলেনি বা ইতোমধ্যে বন্ধ হয়ে গেছে।
DECLARE
cursor c1 is
SELECT employee_name FROM employees;
BEGIN
OPEN c1;
FETCH c1 INTO v_employee_name;
CLOSE c1;
FETCH c1 INTO v_employee_name; -- Trying to fetch after cursor is closed
EXCEPTION
WHEN INVALID_CURSOR THEN
DBMS_OUTPUT.PUT_LINE('Cursor is not open or already closed');
END;
৩.৩. DUP_VAL_ON_INDEX:
এটি তখন ঘটে, যখন একটি ইউনিক কনস্ট্রেইন্টের বিরুদ্ধে ডুপ্লিকেট ভ্যালু ইনসার্ট করার চেষ্টা করা হয়।
BEGIN
INSERT INTO employees (employee_id, employee_name)
VALUES (1, 'John Doe'); -- Assume an employee with ID 1 already exists
EXCEPTION
WHEN DUP_VAL_ON_INDEX THEN
DBMS_OUTPUT.PUT_LINE('Duplicate value found for a unique index');
END;
Predefined Exceptions এর সুবিধা
- স্বয়ংক্রিয় ত্রুটি সনাক্তকরণ:
- Oracle Database নিজেই কিছু সাধারণ ত্রুটি সনাক্ত এবং পরিচালনা করে, যা আপনাকে নিজে ত্রুটি পরিচালনা করতে সহায়ক হয়।
- সহজ ডিবাগিং এবং ত্রুটি হ্যান্ডলিং:
- Predefined exceptions আপনাকে ত্রুটি ঘটার সাথে সাথে তা সনাক্ত এবং কার্যকরভাবে পরিচালনা করার জন্য একটি সহজ উপায় প্রদান করে।
- কোড ক্লিন এবং কমপ্যাক্ট:
- এই exception গুলি ব্যবহার করার ফলে আপনার কোড কমপ্যাক্ট ও সহজ হয় এবং অনেক ত্রুটি সনাক্তকরণ অটোমেটিকভাবে হয়ে যায়।
উপসংহার:
PL/SQL এ Predefined Exceptions খুবই উপকারী কারণ এগুলি আপনাকে ডাটাবেস অপারেশন চলাকালীন সৃষ্ট ত্রুটিগুলি সহজে সনাক্ত এবং হ্যান্ডল করতে সহায়তা করে। এর মধ্যে NO_DATA_FOUND, TOO_MANY_ROWS, ZERO_DIVIDE এবং আরও অনেক exception অন্তর্ভুক্ত রয়েছে, যেগুলি বিভিন্ন ধরনের ত্রুটি পরিস্থিতি মোকাবিলা করতে সক্ষম।
Read more