স্টোরড প্রসিডিউরের ভেতরে প্যারামিটার গ্রহণ করে টেবিলে ডেটা ইনসার্ট করা যায়। এটি অ্যাপ্লিকেশন লেয়ার থেকে একই ইনসার্ট লজিক বারবার লিখতে হয় না।
টেবিল তৈরি
mysql> CREATE TABLE DemoTable1928 (
Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
Name VARCHAR(20),
Age INT
);
স্টোরড প্রসিডিউর তৈরি
mysql> DELIMITER //
mysql> CREATE PROCEDURE insert_demo(IN Name VARCHAR(40), IN Age INT)
BEGIN
INSERT INTO DemoTable1928 (Name, Age) VALUES (Name, Age);
END //
mysql> DELIMITER ;
প্রসিডিউর কল করে ডেটা ইনসার্ট
mysql> CALL insert_demo('Chris', 24);
আউটপুট: Query OK, 1 row affected, 1 warning (0.00 sec)
নোট: ওয়ার্নিং হতে পারে STRICK SQL MODE-এ IFNULL বা ডিফল্ট মান নিয়ে।
ফলাফল যাচাই
mysql> SELECT * FROM DemoTable1928;
+----+-------+------+ | Id | Name | Age | +----+-------+------+ | 1 | Chris | 24 | +----+-------+------+
উন্নত প্রসিডিউর (ভ্যালিডেশন সহ)
CREATE PROCEDURE insert_user_safe(IN p_name VARCHAR(40), IN p_age INT, OUT p_id INT)
BEGIN
IF p_name IS NULL OR p_name = '' THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Name cannot be empty';
ELSEIF p_age < 0 OR p_age > 150 THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Invalid age';
ELSE
INSERT INTO DemoTable1928 (Name, Age) VALUES (p_name, p_age);
SET p_id = LAST_INSERT_ID();
END IF;
END;
কল করা (OUT প্যারামিটার সহ)
CALL insert_user_safe('David', 30, @new_id);
SELECT @new_id;
সর্বোত্তম অনুশীলন
- ইনপুট যাচাই (validation) প্রসিডিউরে করুন।
LAST_INSERT_ID()দিয়ে জেনারেটেড আইডি রিটার্ন করুন।- ট্রানজ্যাকশন ম্যানেজমেন্ট (COMMIT/ROLLBACK) প্রসিডিউরের বাইরে বা অ্যাপ্লিকেশন লেয়ারে করুন।