Stored Procedure (স্টোরড প্রোসিডিউর) হলো একটি ডেটাবেস অবজেক্ট যা এক বা একাধিক SQL স্টেটমেন্টের একটি গ্রুপ হিসেবে সংরক্ষিত হয়। এটি ডেটাবেসের মধ্যে সংরক্ষিত একটি ফাংশনাল কোড যা নির্দিষ্ট কাজ করতে ব্যবহৃত হয়। যখনই সেই কাজটি আবার প্রয়োজন হয়, তখন সেই স্টোরড প্রোসিডিউরটি কল করা হয়, ফলে কোড পুনরায় লেখা বা বারবার ব্যবহারের প্রয়োজন হয় না।
MariaDB-তে স্টোরড প্রোসিডিউর ব্যবহারের মাধ্যমে অনেকগুলো সুবিধা পাওয়া যায়, যেমন পারফরম্যান্স উন্নত করা, কোড পুনঃব্যবহারযোগ্যতা, এবং ডেটাবেসের কাজের সিস্টেমেটিক হ্যান্ডলিং।
Stored Procedure এর সুবিধাসমূহ
- কোড পুনঃব্যবহারযোগ্যতা: একবার একটি স্টোরড প্রোসিডিউর তৈরি করা হলে, সেটি বারবার ব্যবহার করা যায়। ফলে কোডের পুনঃলিখন এড়ানো যায় এবং ডেটাবেসের কাজ সহজ হয়ে যায়।
- পারফরম্যান্স বৃদ্ধি: স্টোরড প্রোসিডিউরগুলি ডেটাবেসের মধ্যে সংরক্ষিত থাকে, ফলে ক্লায়েন্ট অ্যাপ্লিকেশন এবং ডেটাবেসের মধ্যে নেটওয়ার্ক ট্র্যাফিক কম হয়। এছাড়া, MariaDB স্টোরড প্রোসিডিউর কম্পাইল করা থাকে, যা কোয়েরির পারফরম্যান্স বাড়াতে সহায়ক।
- ডেটাবেস লজিক কেন্দ্রিত: সমস্ত লজিক ডেটাবেসের মধ্যে সংরক্ষিত থাকায়, অ্যাপ্লিকেশন এবং ডেটাবেসের মধ্যে লজিকের দ্বন্দ্ব কমে যায়। এটি কোড মেইনটেন্যান্সকে সহজ করে তোলে।
- ট্রানজেকশন সমর্থন: স্টোরড প্রোসিডিউর ট্রানজেকশন পরিচালনা করতে সহায়ক, যা একাধিক SQL অপারেশন একসঙ্গে সফলভাবে অথবা ব্যর্থভাবে সম্পন্ন করতে সক্ষম।
- নিরাপত্তা বৃদ্ধি: ব্যবহারকারীরা সরাসরি SQL কোড না লিখে শুধুমাত্র স্টোরড প্রোসিডিউর কল করতে পারে, যা নিরাপত্তার একটি অতিরিক্ত স্তর যোগ করে। এটি SQL ইনজেকশন প্রতিরোধে সহায়ক।
Stored Procedure তৈরি করা
স্টোরড প্রোসিডিউর তৈরি করতে CREATE PROCEDURE কমান্ড ব্যবহার করা হয়।
সাধারণ গঠন
CREATE PROCEDURE procedure_name()
BEGIN
SQL_statement;
END;
উদাহরণ
ধরা যাক, আমাদের একটি students টেবিল রয়েছে, এবং আমরা একটি স্টোরড প্রোসিডিউর তৈরি করতে চাই যা শিক্ষার্থীর নামের ভিত্তিতে তাদের তথ্য সংগ্রহ করবে।
CREATE PROCEDURE GetStudentByName(IN student_name VARCHAR(100))
BEGIN
SELECT * FROM students WHERE name = student_name;
END;
এই প্রোসিডিউরটি students টেবিল থেকে নির্দিষ্ট নামের শিক্ষার্থীকে খুঁজে বের করবে।
Stored Procedure কল করা
একবার স্টোরড প্রোসিডিউর তৈরি হলে, সেটি কল করতে CALL কমান্ড ব্যবহার করা হয়।
উদাহরণ
CALL GetStudentByName('John Doe');
এটি GetStudentByName প্রোসিডিউরটি কল করবে এবং John Doe নামের শিক্ষার্থীর তথ্য প্রদর্শন করবে।
Stored Procedure-এ ইনপুট এবং আউটপুট প্যারামিটার
স্টোরড প্রোসিডিউর ইনপুট এবং আউটপুট প্যারামিটার গ্রহণ করতে পারে। এগুলো স্টোরড প্রোসিডিউরের মধ্যে ডেটা পাস করার জন্য ব্যবহৃত হয়।
ইনপুট প্যারামিটার (IN)
ইনপুট প্যারামিটার ব্যবহারকারী থেকে ডেটা গ্রহণ করতে ব্যবহৃত হয়।
CREATE PROCEDURE GetStudentByAge(IN student_age INT)
BEGIN
SELECT * FROM students WHERE age = student_age;
END;
আউটপুট প্যারামিটার (OUT)
আউটপুট প্যারামিটার ব্যবহার করে প্রোসিডিউরটির ভিতর থেকে ফলাফল ফিরিয়ে আনা যায়।
CREATE PROCEDURE GetTotalStudents(OUT total_students INT)
BEGIN
SELECT COUNT(*) INTO total_students FROM students;
END;
এখানে total_students আউটপুট প্যারামিটার হিসেবে ব্যবহৃত হবে এবং এটি শিক্ষার্থীদের মোট সংখ্যা প্রদান করবে।
ইনপুট এবং আউটপুট প্যারামিটার ব্যবহার
CALL GetTotalStudents(@total);
SELECT @total;
Stored Procedure-এর মধ্যে কন্ডিশনাল লজিক ব্যবহার
স্টোরড প্রোসিডিউরের মধ্যে কন্ডিশনাল লজিক (যেমন IF, CASE ইত্যাদি) ব্যবহার করা যায়।
উদাহরণ
CREATE PROCEDURE GetStudentDetails(IN student_id INT)
BEGIN
IF student_id > 0 THEN
SELECT * FROM students WHERE id = student_id;
ELSE
SELECT 'Invalid student ID' AS Error;
END IF;
END;
এই প্রোসিডিউরটি চেক করবে, যদি student_id পজিটিভ হয় তবে সংশ্লিষ্ট শিক্ষার্থীর তথ্য দেখাবে, অন্যথায় একটি ত্রুটি বার্তা প্রদান করবে।
Stored Procedure-এ লুপ ব্যবহার
স্টোরড প্রোসিডিউরগুলিতে লুপ (LOOP, WHILE, FOR) ব্যবহার করে একাধিক অপারেশন বা পুনরাবৃত্তি করা যেতে পারে।
উদাহরণ
CREATE PROCEDURE RepeatMessage(IN num_times INT)
BEGIN
DECLARE counter INT DEFAULT 1;
WHILE counter <= num_times DO
SELECT 'Hello, World!';
SET counter = counter + 1;
END WHILE;
END;
এটি Hello, World! বার্তা নির্দিষ্ট সংখ্যক বার প্রিন্ট করবে।
সারাংশ
MariaDB-তে Stored Procedure ব্যবহার করে ডেটাবেসের কোডকে কার্যকরী, পুনঃব্যবহারযোগ্য এবং সেন্ট্রালাইজড করা যায়। এটি ডেটাবেসের লজিক কেন্দ্রীক করে, পারফরম্যান্স উন্নত করে, এবং নিরাপত্তা বাড়ায়। স্টোরড প্রোসিডিউর ইনপুট এবং আউটপুট প্যারামিটার সমর্থন করে, কন্ডিশনাল লজিক এবং লুপের মাধ্যমে জটিল অপারেশনগুলো পরিচালনা করতে সক্ষম।
Read more