PL/SQL এ Exception Handling হল এমন একটি প্রক্রিয়া যার মাধ্যমে কোডে কোনো ত্রুটি (error) ঘটলে, সেই ত্রুটিকে ধরার জন্য নির্দিষ্ট নিয়ম ও পদ্ধতি ব্যবহার করা হয়। Exception Logging হল ত্রুটির তথ্য লগ করা, যাতে ভবিষ্যতে সেই ত্রুটির বিশ্লেষণ করা এবং সমস্যা সমাধান করা সহজ হয়।
PL/SQL তে Exception Handling এবং Logging ব্যবহারের মাধ্যমে অ্যাপ্লিকেশনটির স্থিতিশীলতা এবং ডিবাগিং ক্ষমতা বৃদ্ধি করা যায়।
PL/SQL এ exception handling তিনটি প্রধান অংশে বিভক্ত:
Oracle অনেক predefined exceptions প্রদান করে, যা সাধারণ ত্রুটিগুলি ধরতে ব্যবহৃত হয়। উদাহরণস্বরূপ:
ব্যবহারকারীর তৈরি ত্রুটি, যেগুলি PL/SQL ব্লকে নির্দিষ্ট পরিস্থিতির ভিত্তিতে তৈরি করা হয়।
PL/SQL ব্লকের EXCEPTION অংশে ত্রুটির ধরন উল্লেখ করে সেই ত্রুটির জন্য নির্দিষ্ট সমাধান দেওয়া হয়।
DECLARE
num1 NUMBER := 10;
num2 NUMBER := 0;
result NUMBER;
BEGIN
-- Arithmetic operation that may cause divide by zero exception
result := num1 / num2;
EXCEPTION
-- Handling predefined exception for division by zero
WHEN ZERO_DIVIDE THEN
DBMS_OUTPUT.PUT_LINE('Error: Cannot divide by zero!');
-- Handling other exceptions
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('An unexpected error occurred: ' || SQLERRM);
END;
Explanation:
ZERO_DIVIDE
exceptionটি ধরা হয় এবং Error: Cannot divide by zero!
মেসেজ প্রিন্ট হয়।OTHERS
exception দ্বারা অন্য কোনো ত্রুটি (যেমন, SQL ত্রুটি) ধরতে সক্ষম হবে এবং তার বিশদ ত্রুটির বার্তা দেখাবে।Exception logging হল ত্রুটির তথ্য ডাটাবেসে বা লগ ফাইলে সংরক্ষণ করার প্রক্রিয়া, যা পরে বিশ্লেষণ করা এবং সমস্যার সমাধান করার জন্য ব্যবহৃত হতে পারে।
একটি লগ টেবিল ব্যবহার করে exception লগিং করা যেতে পারে, যাতে ত্রুটির বিস্তারিত তথ্য সংরক্ষিত থাকে। যেমন, ত্রুটি কোড, ত্রুটির বার্তা, এবং ত্রুটি হওয়ার সময়ের তথ্য।
DECLARE
num1 NUMBER := 10;
num2 NUMBER := 0;
result NUMBER;
BEGIN
-- Arithmetic operation that may cause divide by zero exception
result := num1 / num2;
EXCEPTION
WHEN ZERO_DIVIDE THEN
-- Logging the error in a database table
INSERT INTO error_log (error_code, error_message, error_time)
VALUES (SQLCODE, SQLERRM, SYSDATE);
DBMS_OUTPUT.PUT_LINE('Error: Cannot divide by zero!');
WHEN OTHERS THEN
-- Logging any other errors in the error_log table
INSERT INTO error_log (error_code, error_message, error_time)
VALUES (SQLCODE, SQLERRM, SYSDATE);
DBMS_OUTPUT.PUT_LINE('An unexpected error occurred: ' || SQLERRM);
END;
Explanation:
ZERO_DIVIDE
exception ঘটে, ত্রুটির কোড, বার্তা এবং সময় error_log
টেবিলে ইনসার্ট করা হয়।OTHERS
exception দ্বারা তা ধরিয়ে তার বিস্তারিত তথ্য লগে জমা করা হয়।উপরের উদাহরণে, SQLERRM
এবং SQLCODE
ব্যবহার করা হয়েছে ত্রুটির বিশদ বিবরণ রেকর্ড করার জন্য।
DECLARE
v_balance NUMBER := 1000;
BEGIN
-- Simulate a condition where balance is insufficient
IF v_balance < 500 THEN
RAISE_APPLICATION_ERROR(-20001, 'Insufficient balance');
END IF;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Error: ' || SQLERRM);
END;
Explanation:
RAISE_APPLICATION_ERROR
দ্বারা একটি ত্রুটি কোড -20001
এবং একটি কাস্টম বার্তা 'Insufficient balance' তৈরি করা হয়।SQLERRM
এর মাধ্যমে ধরা হয় এবং প্রিন্ট করা হয়।WHEN ... THEN
ব্লক ব্যবহার করে স্পেসিফিক ত্রুটির জন্য আলাদা সমাধান প্রদান করুন। সাধারণ ত্রুটিগুলোর জন্য OTHERS
ব্যবহার করুন।RAISE_APPLICATION_ERROR
ব্যবহার করে কাস্টম ত্রুটি তৈরি করুন।SQLERRM
এবং SQLCODE
ব্যবহার করে ত্রুটির বিস্তারিত তথ্য সংগ্রহ করুন।PL/SQL তে Exception Handling এবং Logging অত্যন্ত গুরুত্বপূর্ণ বিষয়। Exception handling দ্বারা ত্রুটি হ্যান্ডলিং, কোডের স্থিতিশীলতা এবং সঠিক ফলাফল নিশ্চিত করা হয়। Exception Logging ব্যবহার করে ত্রুটির তথ্য সংরক্ষণ করা যায়, যা পরবর্তীতে সমস্যা সমাধান এবং ডিবাগিংয়ের কাজে আসে। Proper exception handling practices কোডের গুণমান বৃদ্ধি করে এবং ভবিষ্যতে ত্রুটির কারণ শনাক্ত করা সহজ করে।