T-SQL এ TRY...CATCH ব্লক ব্যবহার করা হয় ত্রুটি (error) পরিচালনার জন্য। এটি ত্রুটি ঘটলে কোডের নির্বাহ বন্ধ না করে ত্রুটির বিবরণ ধরা এবং একটি নির্দিষ্ট একশন গ্রহণ করার সুযোগ দেয়। TRY ব্লকটি কোডের যে অংশে ত্রুটি ঘটতে পারে, সেখানেই লেখা হয়, আর CATCH ব্লকটি ত্রুটি ঘটলে চালু হয় এবং ত্রুটির সংক্রান্ত তথ্য রিটার্ন করে।
TRY...CATCH ব্লক এর সাধারণ কাঠামো:
BEGIN TRY
-- এই অংশে যে কোড ত্রুটি ঘটাতে পারে, তা লেখা হয়
-- যেমন ডেটাবেস অপারেশন
END TRY
BEGIN CATCH
-- এই অংশে ত্রুটি হলে যে কোড এক্সিকিউট হবে, তা লেখা হয়
-- যেমন ত্রুটির বিস্তারিত তথ্য দেখানো
PRINT 'Error Message: ' + ERROR_MESSAGE();
PRINT 'Error Number: ' + CAST(ERROR_NUMBER() AS NVARCHAR(50));
PRINT 'Error Severity: ' + CAST(ERROR_SEVERITY() AS NVARCHAR(50));
PRINT 'Error State: ' + CAST(ERROR_STATE() AS NVARCHAR(50));
END CATCH
তিনটি মূল ফাংশন:
- ERROR_MESSAGE(): ত্রুটির বার্তা বা বর্ণনা রিটার্ন করে।
- ERROR_NUMBER(): ত্রুটির নম্বর রিটার্ন করে।
- ERROR_SEVERITY(): ত্রুটির গম্ভীরতার স্তর রিটার্ন করে (1-25 মধ্যে একটি সংখ্যা)।
- ERROR_STATE(): ত্রুটির অবস্থার কোড রিটার্ন করে।
TRY...CATCH ব্লক ব্যবহার উদাহরণ
উদাহরণ ১: একটি ভুল ইনসার্ট স্টেটমেন্ট এবং ত্রুটি পরিচালনা
BEGIN TRY
-- ভুল ইনসার্ট স্টেটমেন্ট (প্রাথমিকভাবে একটি ভুল কমান্ড যা ত্রুটি তৈরি করবে)
INSERT INTO Employees (EmployeeID, EmployeeName)
VALUES (NULL, 'John Doe'); -- EmployeeID NULL হতে পারে না
END TRY
BEGIN CATCH
-- ত্রুটি হলে এখানে কোড চলে আসবে
PRINT 'Error Message: ' + ERROR_MESSAGE();
PRINT 'Error Number: ' + CAST(ERROR_NUMBER() AS NVARCHAR(50));
PRINT 'Error Severity: ' + CAST(ERROR_SEVERITY() AS NVARCHAR(50));
PRINT 'Error State: ' + CAST(ERROR_STATE() AS NVARCHAR(50));
END CATCH
ব্যাখ্যা:
- উপরের কোডে,
EmployeeIDকলামেNULLইনপুট করা হবে যা ত্রুটি সৃষ্টি করবে কারণEmployeeIDকলামেNULLঅনুমোদিত নয়। TRYব্লকের মধ্যে ত্রুটি ঘটলে তাCATCHব্লকে চলে যাবে এবং ত্রুটির তথ্য দেখানো হবে।
আউটপুট:
Error Message: Cannot insert the value NULL into column 'EmployeeID', table 'Database.dbo.Employees'; column does not allow nulls. INSERT fails.
Error Number: 515
Error Severity: 16
Error State: 2
উদাহরণ ২: একাধিক SQL অপারেশনের মধ্যে ত্রুটি পরিচালনা
BEGIN TRY
-- প্রথমে সঠিক SQL অপারেশন
PRINT 'Executing first operation...';
INSERT INTO Employees (EmployeeID, EmployeeName) VALUES (101, 'Alice');
-- দ্বিতীয় অপারেশন যেখানে ত্রুটি ঘটবে
PRINT 'Executing second operation...';
INSERT INTO Employees (EmployeeID, EmployeeName) VALUES (NULL, 'Bob'); -- এটি ত্রুটি ঘটাবে
END TRY
BEGIN CATCH
-- ত্রুটি ঘটলে এখানে কোড চালু হবে
PRINT 'Error Message: ' + ERROR_MESSAGE();
PRINT 'Error Number: ' + CAST(ERROR_NUMBER() AS NVARCHAR(50));
PRINT 'Error Severity: ' + CAST(ERROR_SEVERITY() AS NVARCHAR(50));
PRINT 'Error State: ' + CAST(ERROR_STATE() AS NVARCHAR(50));
END CATCH
ব্যাখ্যা:
- প্রথমে একটি সঠিক
INSERTঅপারেশন সম্পাদন হবে। তারপর দ্বিতীয়INSERTস্টেটমেন্টেNULLইনপুট দেওয়ার কারণে ত্রুটি ঘটবে, যাCATCHব্লক দ্বারা পরিচালিত হবে।
আউটপুট:
Executing first operation...
Executing second operation...
Error Message: Cannot insert the value NULL into column 'EmployeeID', table 'Database.dbo.Employees'; column does not allow nulls. INSERT fails.
Error Number: 515
Error Severity: 16
Error State: 2
TRANSACTION এর সাথে TRY...CATCH ব্লক
TRANSACTION এর সঙ্গে TRY...CATCH ব্লক ব্যবহার করে আপনি ডেটাবেসে একাধিক কার্যক্রম পরিচালনা করতে পারেন এবং যদি কোনো ত্রুটি ঘটে, তবে ROLLBACK করে ডেটাবেস পরিবর্তন বাতিল করতে পারেন।
উদাহরণ ৩: ট্রানজেকশনের সাথে T-SQL ত্রুটি পরিচালনা
BEGIN TRY
BEGIN TRANSACTION;
-- প্রথম অপারেশন
INSERT INTO Employees (EmployeeID, EmployeeName) VALUES (102, 'David');
-- দ্বিতীয় অপারেশন (ত্রুটি ঘটবে)
INSERT INTO Employees (EmployeeID, EmployeeName) VALUES (NULL, 'Eva'); -- ত্রুটি
COMMIT; -- যদি কোন ত্রুটি না ঘটে, তাহলে COMMIT হবে
END TRY
BEGIN CATCH
-- ত্রুটি হলে ROLLBACK করা হবে
ROLLBACK;
PRINT 'Error Message: ' + ERROR_MESSAGE();
PRINT 'Error Number: ' + CAST(ERROR_NUMBER() AS NVARCHAR(50));
PRINT 'Error Severity: ' + CAST(ERROR_SEVERITY() AS NVARCHAR(50));
PRINT 'Error State: ' + CAST(ERROR_STATE() AS NVARCHAR(50));
END CATCH
ব্যাখ্যা:
- এখানে একটি TRANSACTION শুরু করা হয়েছে।
- প্রথম
INSERTঅপারেশন সফলভাবে সম্পন্ন হলে দ্বিতীয়INSERTঅপারেশন ত্রুটি তৈরি করবে কারণEmployeeIDকলামেNULLইনপুট অনুমোদিত নয়। - ত্রুটি হলে
CATCHব্লকটিROLLBACKচালাবে এবং সমস্ত পরিবর্তন বাতিল করবে।
আউটপুট:
Error Message: Cannot insert the value NULL into column 'EmployeeID', table 'Database.dbo.Employees'; column does not allow nulls. INSERT fails.
Error Number: 515
Error Severity: 16
Error State: 2
সারাংশ
T-SQL তে TRY...CATCH ব্লক ব্যবহার করে আপনি ত্রুটি হ্যান্ডলিং করতে পারেন। এটি ত্রুটির ঘটনার পর ডেটাবেস পরিবর্তন রক্ষা এবং বিস্তারিত ত্রুটির বার্তা প্রাপ্ত করতে সহায়তা করে। TRANSACTION এর সাথে TRY...CATCH ব্লক ব্যবহার করলে একাধিক কার্যক্রমের মাঝে ত্রুটি ঘটলে ROLLBACK করে ডেটাবেস পরিবর্তন বাতিল করা যায়।
Read more