PL/SQL তে Exception Handling হল একটি গুরুত্বপূর্ণ বৈশিষ্ট্য যা আপনাকে রানটাইমের সময় উদ্ভূত ত্রুটিগুলির (errors) সঠিকভাবে পরিচালনা করার সুযোগ দেয়। এর মাধ্যমে আপনি নির্দিষ্ট ত্রুটি ঘটলে সেগুলি ধরতে, প্রক্রিয়া করতে এবং উপযুক্ত বার্তা প্রদর্শন করতে পারেন।
PL/SQL তে exception হল একটি সংকেত যা ফাংশন, প্রোসিডিউর বা ব্লকের এক্সিকিউশনের সময় ঘটে। যখন কোনো ত্রুটি ঘটে, তখন এটি সাধারণত exception block এর মাধ্যমে পরিচালিত হয়।
PL/SQL এর exception handling সাধারণত তিনটি প্রধান অংশে বিভক্ত:
PL/SQL তে exception handling করার জন্য একটি EXCEPTION
ব্লক ব্যবহার করা হয়, যা BEGIN...END
ব্লকের পরে আসে।
BEGIN
-- Normal PL/SQL code (procedures, SQL queries, etc.)
EXCEPTION
-- Exception handling code (handling errors)
WHEN exception_name THEN
-- Action to be taken when exception occurs
WHEN OTHERS THEN
-- Default handler for all other exceptions
END;
PL/SQL তে কিছু সাধারণ ত্রুটি (predefined exceptions) থাকে যা স্বয়ংক্রিয়ভাবে পরিচালনা করা হয়। কিছু সাধারণ predefined exceptions:
SELECT INTO
কুইরি কোনো রেকর্ড ফেরত দেয় না।SELECT INTO
কুইরি একাধিক রেকর্ড ফেরত দেয়।DECLARE
v_employee_name employees.employee_name%TYPE;
BEGIN
-- Trying to fetch employee name where ID = 100
SELECT employee_name INTO v_employee_name FROM employees WHERE employee_id = 100;
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('No employee found with the specified ID.');
WHEN TOO_MANY_ROWS THEN
DBMS_OUTPUT.PUT_LINE('Multiple employees found with the same ID.');
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('An unexpected error occurred.');
END;
এখানে, যদি employee_id = 100
এর জন্য কোনো রেকর্ড না পাওয়া যায়, তাহলে NO_DATA_FOUND
exception হ্যান্ডেল হবে এবং একটি বার্তা প্রদর্শিত হবে।
PL/SQL তে আপনি নিজের exception তৈরি করতে পারেন। এটি করার জন্য, আপনাকে প্রথমে একটি exception variable ডিক্লেয়ার করতে হবে এবং তারপর প্রয়োজনীয় স্থানে তাকে raise করতে হবে।
DECLARE
-- Define user-defined exception
insufficient_funds EXCEPTION;
BEGIN
-- Some logic here, if condition occurs
IF account_balance < withdrawal_amount THEN
-- Raise the user-defined exception
RAISE insufficient_funds;
END IF;
EXCEPTION
WHEN insufficient_funds THEN
DBMS_OUTPUT.PUT_LINE('Insufficient funds for withdrawal.');
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('An unexpected error occurred.');
END;
এখানে, insufficient_funds
একটি user-defined exception যা ব্যবহার করা হয়েছে যখন কোনো অ্যাকাউন্টে পর্যাপ্ত টাকা না থাকে।
DECLARE
insufficient_balance EXCEPTION;
BEGIN
-- Some logic
IF account_balance < 0 THEN
RAISE insufficient_balance;
END IF;
EXCEPTION
WHEN insufficient_balance THEN
DBMS_OUTPUT.PUT_LINE('Account balance is negative.');
END;
RAISE_APPLICATION_ERROR
একটি বিল্ট-ইন PL/SQL procedure যা একটি নির্দিষ্ট ত্রুটি কোড এবং বার্তা প্রদান করতে ব্যবহৃত হয়। এটি সাধারণত ব্যবহারকারীর ডিফাইন করা ত্রুটির জন্য ব্যবহৃত হয়, যেখানে কোড -20000
থেকে -20999
এর মধ্যে হতে পারে।
DECLARE
insufficient_funds EXCEPTION;
BEGIN
-- Some logic
IF account_balance < withdrawal_amount THEN
RAISE_APPLICATION_ERROR(-20001, 'Insufficient funds for withdrawal.');
END IF;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('An unexpected error occurred: ' || SQLERRM);
END;
এখানে, RAISE_APPLICATION_ERROR(-20001, 'Insufficient funds for withdrawal.')
ব্যবহার করা হয়েছে একটি কাস্টম ত্রুটি কোড এবং বার্তা তৈরি করার জন্য।
যখন নির্দিষ্ট exception ধরতে না পারি, তখন WHEN OTHERS
ব্যবহার করা হয়। এটি সাধারণত একটি ফোলব্যাক মেকানিজম হিসেবে ব্যবহৃত হয় এবং এটি সব ধরনের ত্রুটির জন্য প্রযোজ্য।
DECLARE
v_employee_id employees.employee_id%TYPE;
BEGIN
-- Attempt to fetch an employee ID
SELECT employee_id INTO v_employee_id FROM employees WHERE employee_name = 'John Doe';
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('No employee found with that name.');
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('An unexpected error occurred: ' || SQLERRM);
END;
এখানে, যদি কোনো অন্যান্য ত্রুটি ঘটে (যেমন ডাটা টাইপ বা অন্য সমস্যা), তাহলে WHEN OTHERS
ব্লকটি চালু হবে এবং সঠিক ত্রুটি বার্তা প্রদর্শন করবে।
WHEN OTHERS
: WHEN OTHERS
ব্যবহার করবেন শুধুমাত্র তখন যখন আপনি সত্যিই নিশ্চিত নন যে কোন exception ঘটতে পারে।Exception Handling PL/SQL এর একটি গুরুত্বপূর্ণ বৈশিষ্ট্য যা কোডের চলাকালীন সময়ে হওয়া ত্রুটি (errors) সঠিকভাবে পরিচালনা করতে সহায়ক। Exception হল একটি অপ্রত্যাশিত ঘটনা যা কোডের এক্সিকিউশন থামিয়ে দেয়। PL/SQL তে Exception Handling ব্যবহার করে, আপনি ত্রুটিগুলি সঠিকভাবে ধরতে, প্রক্রিয়া চালিয়ে যেতে এবং ব্যবহারকারীকে কার্যকরীভাবে ত্রুটি সম্পর্কে জানাতে পারেন।
কোনও প্রোগ্রাম যখন চালানো হয়, তখন অনেক ধরণের ত্রুটি ঘটতে পারে। এই ত্রুটিগুলি যদি ঠিকভাবে পরিচালিত না হয়, তবে প্রোগ্রামটি বন্ধ হয়ে যেতে পারে বা ভুল ফলাফল দিতে পারে। PL/SQL এর exception handling এর মাধ্যমে:
PL/SQL তে exception handling সাধারণত তিনটি প্রধান ব্লক দিয়ে সম্পন্ন হয়:
BEGIN
-- Normal execution code
EXCEPTION
WHEN exception_name THEN
-- Exception handling code
WHEN OTHERS THEN
-- Code to handle all other exceptions
END;
ধরা যাক, আপনি একটি ডেটাবেসে কর্মচারীর বেতন আপডেট করার চেষ্টা করছেন এবং সেই বেতন যদি শূন্য (zero) হয় তবে একটি ত্রুটি ঘটতে পারে।
DECLARE
v_salary NUMBER := 0;
BEGIN
-- Attempt to update employee salary
UPDATE employees
SET salary = v_salary
WHERE employee_id = 101;
-- If salary is zero, trigger an exception
IF v_salary = 0 THEN
RAISE_APPLICATION_ERROR(-20001, 'Salary cannot be zero.');
END IF;
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('No records found for update.');
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('An error occurred: ' || SQLERRM);
END;
এখানে, NO_DATA_FOUND
এবং OTHERS
নামক দুটি exception ব্যবহৃত হয়েছে:
User-Defined Exceptions: PL/SQL তে আপনি নিজেই exception তৈরি করতে পারেন, যা আপনার কোডের বিশেষ ত্রুটিগুলির জন্য ব্যবহৃত হবে। এর জন্য, প্রথমে exception ঘোষণা করতে হয়, এবং পরে RAISE
কমান্ড দিয়ে এটি ব্যবহার করা হয়।
User-defined Exception Declaration Example:
DECLARE
e_salary_exception EXCEPTION;
v_salary NUMBER := -500;
BEGIN
IF v_salary < 0 THEN
RAISE e_salary_exception;
END IF;
EXCEPTION
WHEN e_salary_exception THEN
DBMS_OUTPUT.PUT_LINE('Salary cannot be negative.');
END;
Handling Multiple Exceptions: PL/SQL তে একাধিক exception একটি EXCEPTION
ব্লকে একসাথে পরিচালনা করা যেতে পারে। একাধিক exception পরস্পরকে প্রভাবিত না করে আলাদাভাবে ম্যানেজ করা যাবে।
Example:
BEGIN
-- Some code
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('No data found');
WHEN TOO_MANY_ROWS THEN
DBMS_OUTPUT.PUT_LINE('Too many rows returned');
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Other error: ' || SQLERRM);
END;
SQLERRM: এই বিল্ট-ইন ফাংশনটি আপনাকে ত্রুটির বার্তা প্রদান করে, যা exception ধরা হলে এর বিবরণ জানতে সাহায্য করে।
Example:
BEGIN
-- Some operation that causes an error
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Error Message: ' || SQLERRM);
END;
RAISE_APPLICATION_ERROR: যখন আপনি নিজেই exception তৈরি করতে চান, তখন RAISE_APPLICATION_ERROR
ব্যবহার করতে পারেন, যা একটি নির্দিষ্ট ত্রুটি কোড এবং বার্তা প্রদর্শন করবে।
Example:
BEGIN
-- Some code
RAISE_APPLICATION_ERROR(-20001, 'Custom error occurred');
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Error: ' || SQLERRM);
END;
PL/SQL তে Exception Handling কোডের কার্যকারিতা এবং স্থিরতা নিশ্চিত করতে অত্যন্ত গুরুত্বপূর্ণ। এটি আপনাকে কোডের ত্রুটিগুলি ধরা এবং সঠিকভাবে পরিচালনা করার সুযোগ প্রদান করে, যার ফলে প্রোগ্রাম ত্রুটি ছাড়াই চলতে থাকে এবং ব্যবহারকারীকে সঠিক তথ্য প্রদান করা সম্ভব হয়।
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 তখন ঘটে, যখন একটি 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
বার্তা প্রদর্শিত হবে।
SELECT INTO
এর মাধ্যমে যদি কোনো রেকর্ড না পাওয়া যায়, তাহলে এই 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
বার্তা প্রদর্শিত হবে।
Oracle PL/SQL এ আরও কিছু predefined exceptions রয়েছে, যেগুলি সাধারণ ডেটাবেস ত্রুটির সাথে সম্পর্কিত। যেমন:
এটি ঘটে যখন আপনি 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;
এটি ঘটে যখন আপনি একটি কুর্সর ব্যবহার করার চেষ্টা করেন যা খোলেনি বা ইতোমধ্যে বন্ধ হয়ে গেছে।
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;
এটি তখন ঘটে, যখন একটি ইউনিক কনস্ট্রেইন্টের বিরুদ্ধে ডুপ্লিকেট ভ্যালু ইনসার্ট করার চেষ্টা করা হয়।
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;
PL/SQL এ Predefined Exceptions খুবই উপকারী কারণ এগুলি আপনাকে ডাটাবেস অপারেশন চলাকালীন সৃষ্ট ত্রুটিগুলি সহজে সনাক্ত এবং হ্যান্ডল করতে সহায়তা করে। এর মধ্যে NO_DATA_FOUND, TOO_MANY_ROWS, ZERO_DIVIDE এবং আরও অনেক exception অন্তর্ভুক্ত রয়েছে, যেগুলি বিভিন্ন ধরনের ত্রুটি পরিস্থিতি মোকাবিলা করতে সক্ষম।
PL/SQL-এ User-defined Exceptions ব্যবহারকারী বা ডেভেলপার দ্বারা নির্দিষ্ট করা বিশেষ ধরণের ত্রুটি (error) যা প্রোগ্রামের নির্দিষ্ট অংশে ঘটে এবং তাকে যথাযথভাবে হ্যান্ডল করতে সাহায্য করে। PL/SQL তে পূর্বনির্ধারিত কিছু এক্সেপশন যেমন NO_DATA_FOUND
, TOO_MANY_ROWS
ইত্যাদি থাকে, কিন্তু যদি আপনার প্রোগ্রামে বিশেষ ধরণের ত্রুটি ঘটে যা পূর্বনির্ধারিত এক্সেপশন দ্বারা কভার করা হয়নি, তবে আপনি নিজে একটি User-defined Exception তৈরি করতে পারেন।
প্রথমে, আপনাকে এক্সেপশনটি ঘোষণা করতে হবে। PL/SQL-এ EXCEPTION
ব্লকে এটি ডিক্লেয়ার করা হয়।
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) করা হবে এবং একটি কাস্টম বার্তা প্রদর্শিত হবে।
একটি User-defined exception চালু করার জন্য RAISE স্টেটমেন্ট ব্যবহার করা হয়। এটি আপনাকে নির্দিষ্ট শর্ত পূর্ণ হলে এক্সেপশনটি তোলার (raise) সুযোগ দেয়।
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 exception রেইজ করার পরে, আপনাকে সেই exception-টি যথাযথভাবে হ্যান্ডেল করতে হবে। হ্যান্ডলিং প্রক্রিয়াটি EXCEPTION
ব্লকে ঘটে।
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(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
ব্যবহার করে এর ত্রুটি বার্তা প্রদর্শন করা হবে।
PL/SQL-এ User-defined Exceptions ব্যবহারকারীর প্রয়োজন অনুসারে কাস্টম ত্রুটি তৈরি করতে সহায়তা করে। এগুলি আপনি শর্তানুযায়ী প্রয়োগ করে প্রোগ্রামটি আরও নির্ভরযোগ্য এবং ব্যবহারযোগ্য করতে পারেন। এক্সেপশন রেইজ (RAISE) এবং RAISE_APPLICATION_ERROR
এর মাধ্যমে নির্দিষ্ট ত্রুটির জন্য বার্তা প্রদান এবং তা হ্যান্ডল করা সম্ভব হয়, যা আপনার কোডে ত্রুটি মোকাবেলা করার সক্ষমতা বাড়ায়।
PL/SQL-এ RAISE এবং RAISE_APPLICATION_ERROR দুটি গুরুত্বপূর্ণ কমান্ড, যা এক্সেপশন হ্যান্ডলিংয়ের জন্য ব্যবহৃত হয়। এই কমান্ডগুলি কোডের চলাকালীন সময়ে কোন সমস্যা বা ত্রুটি ঘটলে ত্রুটির সূচনা করতে বা ব্যবহারকারীর জন্য কাস্টম ত্রুটি মেসেজ তৈরি করতে সাহায্য করে।
RAISE কমান্ডটি সাধারণত exception ত্রুটি ফেলে দেয় এবং এই এক্সেপশনটি EXCEPTION
ব্লকে ক্যাচ করা হয়। এটি একটি predefined বা user-defined exception হতে পারে। যখন RAISE ব্যবহার করা হয়, তখন তা ত্রুটি ছুঁড়ে দিয়ে ত্রুটি মেসেজের সাথে বা শুধুমাত্র exception নির্দিষ্ট করে কোড থামিয়ে দেয়।
RAISE [exception_name];
DECLARE
v_salary NUMBER := 5000;
BEGIN
IF v_salary < 10000 THEN
RAISE salary_too_low;
END IF;
EXCEPTION
WHEN salary_too_low THEN
DBMS_OUTPUT.PUT_LINE('Salary is too low!');
END;
এখানে salary_too_low
এক্সেপশনটি RAISE দ্বারা প্রবর্তিত হচ্ছে, এবং যদি বেতন ১০,০০০ টাকার নিচে থাকে, তাহলে এটি এক্সেপশনটিকে ক্যাচ করে এবং একটি মেসেজ প্রিন্ট করবে।
RAISE_APPLICATION_ERROR কমান্ডটি ব্যবহারকারী-নির্ধারিত ত্রুটি মেসেজ তৈরি করার জন্য ব্যবহৃত হয়। এটি একটি নির্দিষ্ট ত্রুটি কোড এবং কাস্টম ত্রুটি মেসেজ সহ ত্রুটি প্রবর্তন করে। এই কমান্ডটি SQLCODE এবং SQLERRM এর মতো সিস্টেম ডিফাইনড এক্সেপশনগুলি ব্যবহার না করে, কাস্টম ত্রুটি কোড দিয়ে ত্রুটি মেসেজ তৈরি করতে সাহায্য করে।
RAISE_APPLICATION_ERROR সর্বদা ২০০০০ থেকে ২০৯৯৯ পর্যন্ত ত্রুটি কোড দিয়ে কাজ করে।
RAISE_APPLICATION_ERROR(error_number, error_message);
DECLARE
v_salary NUMBER := 5000;
BEGIN
IF v_salary < 10000 THEN
RAISE_APPLICATION_ERROR(-20001, 'Salary must be at least 10,000!');
END IF;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Error: ' || SQLERRM);
END;
এখানে, যদি বেতন ১০,০০০ টাকার নিচে থাকে, তাহলে RAISE_APPLICATION_ERROR
ব্যবহার করে কাস্টম ত্রুটি কোড (-20001) এবং মেসেজ 'Salary must be at least 10,000!'
প্রদান করা হয়। EXCEPTION
ব্লকটি ত্রুটি মেসেজ প্রিন্ট করবে।
Feature | RAISE | RAISE_APPLICATION_ERROR |
---|---|---|
Purpose | সাধারণ এক্সেপশন ছুঁড়ে দেওয়া | কাস্টম ত্রুটি কোড এবং মেসেজ সহ এক্সেপশন তৈরি করা |
Error Code | পূর্বনির্ধারিত (Predefined) এক্সেপশন | কাস্টম কোড (20000 থেকে 20999 পর্যন্ত) |
Error Message | পূর্বনির্ধারিত মেসেজ | কাস্টম ত্রুটি মেসেজ |
Usage | সাধারণ বা ব্যবহারকারী-নির্ধারিত এক্সেপশন সৃষ্টিতে ব্যবহার | কাস্টম ত্রুটি কোড এবং মেসেজ তৈরি করতে ব্যবহার |
RAISE এবং RAISE_APPLICATION_ERROR PL/SQL-এ শক্তিশালী টুল, যা এক্সেপশন হ্যান্ডলিং-এর মাধ্যমে কোডের নিরাপত্তা এবং কার্যকারিতা বৃদ্ধি করতে সাহায্য করে। RAISE সাধারণ এক্সেপশন ছুঁড়ে দিতে ব্যবহৃত হয়, আর RAISE_APPLICATION_ERROR কাস্টম ত্রুটি কোড এবং মেসেজ তৈরি করার জন্য ব্যবহৃত হয়।
Read more