PL/SQL-এ User-defined Exceptions ব্যবহারকারী বা ডেভেলপার দ্বারা নির্দিষ্ট করা বিশেষ ধরণের ত্রুটি (error) যা প্রোগ্রামের নির্দিষ্ট অংশে ঘটে এবং তাকে যথাযথভাবে হ্যান্ডল করতে সাহায্য করে। PL/SQL তে পূর্বনির্ধারিত কিছু এক্সেপশন যেমন NO_DATA_FOUND, TOO_MANY_ROWS ইত্যাদি থাকে, কিন্তু যদি আপনার প্রোগ্রামে বিশেষ ধরণের ত্রুটি ঘটে যা পূর্বনির্ধারিত এক্সেপশন দ্বারা কভার করা হয়নি, তবে আপনি নিজে একটি User-defined Exception তৈরি করতে পারেন।
User-defined Exception এর প্রয়োজনীয়তা:
- যখন পূর্বনির্ধারিত এক্সেপশন ব্যবহার করে সমস্যা সমাধান করা সম্ভব না হয়।
- প্রোগ্রামের ব্যবসায়িক লজিকের জন্য একটি কাস্টম ত্রুটি বার্তা তৈরি করার প্রয়োজন হলে।
- নির্দিষ্ট ধরণের ত্রুটি কন্ট্রোল করার জন্য প্রয়োজনে কাস্টম এক্সেপশন তৈরি করা।
User-defined Exception তৈরি এবং ব্যবহারের ধাপ:
- একটি এক্সেপশন ঘোষণা করা
- এটি ডিফাইন করা এবং এক্সেপশন হ্যান্ডলিং করা
১. একটি এক্সেপশন ঘোষণা করা
প্রথমে, আপনাকে এক্সেপশনটি ঘোষণা করতে হবে। PL/SQL-এ EXCEPTION ব্লকে এটি ডিক্লেয়ার করা হয়।
Syntax:
DECLARE
exception_name EXCEPTION; -- User-defined exception declaration
BEGIN
-- code
EXCEPTION
WHEN exception_name THEN
-- exception handling code
END;
উদাহরণ:
DECLARE
insufficient_balance EXCEPTION; -- Declaring a user-defined exception
v_balance NUMBER := 500;
BEGIN
IF v_balance < 1000 THEN
RAISE insufficient_balance; -- Raise the exception if condition is met
END IF;
EXCEPTION
WHEN insufficient_balance THEN
DBMS_OUTPUT.PUT_LINE('Insufficient balance! Please add more funds.');
END;
এখানে, insufficient_balance নামে একটি কাস্টম এক্সেপশন ঘোষণা করা হয়েছে। যদি v_balance ১০০০ এর নিচে থাকে, তবে এটি রেইজ (raise) করা হবে এবং একটি কাস্টম বার্তা প্রদর্শিত হবে।
২. এক্সেপশন রেইজ (RAISE) করা
একটি User-defined exception চালু করার জন্য RAISE স্টেটমেন্ট ব্যবহার করা হয়। এটি আপনাকে নির্দিষ্ট শর্ত পূর্ণ হলে এক্সেপশনটি তোলার (raise) সুযোগ দেয়।
Syntax:
RAISE exception_name; -- RAISE keyword to trigger the exception
উদাহরণ:
DECLARE
invalid_age EXCEPTION;
v_age NUMBER := -5;
BEGIN
IF v_age < 0 THEN
RAISE invalid_age; -- Raise exception when age is invalid
END IF;
EXCEPTION
WHEN invalid_age THEN
DBMS_OUTPUT.PUT_LINE('Invalid age entered!');
END;
এখানে, invalid_age এক্সেপশনটি তখন রেইজ হবে যখন v_age এর মান নেতিবাচক (negative) হবে। এরপর EXCEPTION ব্লক এ গিয়ে "Invalid age entered!" বার্তা প্রিন্ট হবে।
৩. User-defined Exceptions Handling
একটি user-defined exception রেইজ করার পরে, আপনাকে সেই exception-টি যথাযথভাবে হ্যান্ডেল করতে হবে। হ্যান্ডলিং প্রক্রিয়াটি EXCEPTION ব্লকে ঘটে।
Syntax:
DECLARE
exception_name EXCEPTION;
BEGIN
-- Code that raises the exception
EXCEPTION
WHEN exception_name THEN
-- Code to handle the exception
END;
উদাহরণ:
DECLARE
invalid_id EXCEPTION; -- Declaring a user-defined exception
v_emp_id NUMBER := 9999;
BEGIN
IF v_emp_id NOT IN (SELECT employee_id FROM employees) THEN
RAISE invalid_id; -- Raise exception if employee ID doesn't exist
END IF;
EXCEPTION
WHEN invalid_id THEN
DBMS_OUTPUT.PUT_LINE('Employee ID does not exist!');
END;
এখানে, invalid_id এক্সেপশনটি রেইজ হবে যদি কর্মচারী আইডি employees টেবিলের মধ্যে না থাকে। এরপর, EXCEPTION ব্লকের মাধ্যমে এই ত্রুটির জন্য একটি কাস্টম বার্তা প্রিন্ট করা হবে।
৪. RAISE_APPLICATION_ERROR ব্যবহার করা
RAISE_APPLICATION_ERROR ব্যবহার করে আপনি আরো নির্দিষ্ট ত্রুটি বার্তা তৈরি করতে পারেন। এই ফাংশনটি ব্যবহারকারীকে আরও বিস্তারিত ত্রুটি বার্তা প্রদান করতে সহায়তা করে।
Syntax:
RAISE_APPLICATION_ERROR(error_number, error_message);
error_number: একটি নেতিবাচক মান যা ত্রুটির কোড হিসেবে ব্যবহৃত হয়। এটি ২০০০০ থেকে ২০৯৯৯ পর্যন্ত হতে পারে।error_message: একটি কাস্টম ত্রুটি বার্তা যা প্রদর্শিত হবে।
উদাহরণ:
DECLARE
insufficient_funds EXCEPTION;
v_balance NUMBER := 100;
BEGIN
IF v_balance < 500 THEN
RAISE_APPLICATION_ERROR(-20001, 'Insufficient funds! Your balance is too low.');
END IF;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Error: ' || SQLERRM); -- Display error message
END;
এখানে, যদি v_balance ৫০০ এর কম হয়, তবে RAISE_APPLICATION_ERROR ব্যবহার করে একটি কাস্টম ত্রুটি কোড এবং বার্তা রেইজ করা হবে। SQLERRM ব্যবহার করে এর ত্রুটি বার্তা প্রদর্শন করা হবে।
User-defined Exceptions এর সুবিধা:
- কাস্টম ত্রুটি বার্তা: আপনি নির্দিষ্ট কন্ডিশনে কাস্টম ত্রুটি বার্তা প্রদান করতে পারেন, যা ডেভেলপারের জন্য কোডের সমস্যা বুঝতে সহজ করে তোলে।
- প্রোগ্রাম লজিক: নির্দিষ্ট শর্তে কাস্টম এক্সেপশন ব্যবহার করে প্রোগ্রামের মধ্যে লজিক প্রয়োগ করা যায়।
- ভাল ত্রুটি হ্যান্ডলিং: যেহেতু আপনি নিজে ত্রুটি তৈরি ও হ্যান্ডেল করতে পারবেন, তাই আপনার প্রোগ্রাম ত্রুটি মোকাবেলায় আরও শক্তিশালী হবে।
Conclusion:
PL/SQL-এ User-defined Exceptions ব্যবহারকারীর প্রয়োজন অনুসারে কাস্টম ত্রুটি তৈরি করতে সহায়তা করে। এগুলি আপনি শর্তানুযায়ী প্রয়োগ করে প্রোগ্রামটি আরও নির্ভরযোগ্য এবং ব্যবহারযোগ্য করতে পারেন। এক্সেপশন রেইজ (RAISE) এবং RAISE_APPLICATION_ERROR এর মাধ্যমে নির্দিষ্ট ত্রুটির জন্য বার্তা প্রদান এবং তা হ্যান্ডল করা সম্ভব হয়, যা আপনার কোডে ত্রুটি মোকাবেলা করার সক্ষমতা বাড়ায়।
Read more