MySQL-এ স্টোরড প্রসিডিউর তৈরি করে প্যারামিটার সহ ডেটা ইনসার্ট করা যায়। এটি লজিক এনক্যাপসুলেট করে, নেটওয়ার্ক রাউন্ড ট্রিপ কমানো এবং সিকিউরিটি বাড়াতে সাহায্য করে।
টেবিল তৈরি
CREATE TABLE insert_data_sp_demo (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(20),
age INT
);
স্টোরড প্রসিডিউর তৈরি
DELIMITER //
CREATE PROCEDURE sp_insert_student(
IN p_student_name VARCHAR(100),
IN p_student_age INT
)
BEGIN
INSERT INTO insert_data_sp_demo (name, age) VALUES (p_student_name, p_student_age);
END //
DELIMITER ;
প্রসিডিউর কল করা
CALL sp_insert_student('Chris', 24);
ফলাফল যাচাই
SELECT * FROM insert_data_sp_demo;
+----+-------+------+
| id | name | age |
+----+-------+------+
| 1 | Chris | 24 |
+----+-------+------+
আউটপুট প্যারামিটার (LAST_INSERT_ID রিটার্ন)
DELIMITER //
CREATE PROCEDURE sp_insert_student_ret(
IN p_name VARCHAR(100),
IN p_age INT,
OUT p_new_id INT
)
BEGIN
INSERT INTO insert_data_sp_demo (name, age) VALUES (p_name, p_age);
SET p_new_id = LAST_INSERT_ID();
END //
DELIMITER ;
-- কল
CALL sp_insert_student_ret('Anna', 22, @new_id);
SELECT @new_id;
ফলাফল
+---------+
| @new_id |
+---------+
| 2 |
+---------+
শর্তসাপেক্ষ লজিক (IF/ELSE)
CREATE PROCEDURE sp_insert_conditional(
IN p_name VARCHAR(100),
IN p_age INT
)
BEGIN
IF p_age >= 18 THEN
INSERT INTO insert_data_sp_demo (name, age) VALUES (p_name, p_age);
SELECT 'Inserted' AS status;
ELSE
SELECT 'Rejected: under 18' AS status;
END IF;
END
সেরা অনুশীলন
DELIMITER //...DELIMITER ;ব্যবহার করুন প্রসিডিউর বডি ডিফাইন করার সময়- প্যারামিটারে
IN(ইনপুট),OUT(আউটপুট),INOUT(দুটোই) স্পেসিফাই করুন LAST_INSERT_ID()সেশন-স্কোপড, কনকারেন্টি-সেফ- ত্রুটি হ্যান্ডলিং:
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION ... - SQL ইনজেকশন রোধ: প্রসিডিউর প্যারামিটার বাইন্ড হয়, স্ট্রিং কনক্যাটিনেশন নয়
প্রসিডিউর তালিকা দেখুন
SHOW PROCEDURE STATUS WHERE Db = 'your_db';