Vấn đề: Tạo Stored Procedure nhận tham số và INSERT vào bảng
Cần procedure insert_demo nhận Name và Age, chèn vào bảng có Id AUTO_INCREMENT.
Giải pháp: CREATE PROCEDURE với tham số IN
1. Tạo bảng
CREATE TABLE DemoTable (
Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
Name VARCHAR(20),
Age INT
);
2. Tạo Procedure
DELIMITER //
CREATE PROCEDURE insert_demo(IN p_Name VARCHAR(40), IN p_Age INT)
BEGIN
INSERT INTO DemoTable (Name, Age) VALUES (p_Name, p_Age);
END //
DELIMITER ;
3. Gọi Procedure
CALL insert_demo('Chris', 24);
4. Kết quả
+----+-------+------+
| Id | Name | Age |
+----+-------+------+
| 1 | Chris | 24 |
+----+-------+------+
Giải thích
IN– Tham số đầu vào (mặc định). Có thêmOUT(trả về),INOUT(cả hai).- Tên tham số thường tiền tố
p_hoặcv_để tránh trùng tên cột. DELIMITER //– Thay đổi delimiter để định nghĩa procedure chứa;.- Bên trong procedure: dùng tham số như biến bình thường.
Mở rộng: Trả về ID vừa chèn (LAST_INSERT_ID)
CREATE PROCEDURE insert_demo(IN p_Name VARCHAR(40), IN p_Age INT, OUT p_Id INT)
BEGIN
INSERT INTO DemoTable (Name, Age) VALUES (p_Name, p_Age);
SET p_Id = LAST_INSERT_ID();
END
Gọi: CALL insert_demo('David', 30, @new_id); SELECT @new_id;
Best practice
- Validate input trong procedure (kiểm tra NULL, độ dài, phạm vi).
- Xử lý lỗi với
DECLARE ... HANDLER. - Tránh logic phức tạp trong procedure – chuyển sang application layer.