Trong Stored Procedure, có thể gọi Procedure khác dựa trên điều kiện IF ... THEN ... ELSE ... END IF.
Cú pháp
CREATE PROCEDURE ten_proc(IN param INT)
BEGIN
IF param > 100 THEN
CALL proc_1();
ELSE
CALL proc_2();
END IF;
END
Ví dụ minh họa
Tạo 2 procedure con:
DELIMITER // CREATE PROCEDURE Hello_Stored_Procedure() BEGIN SELECT 'Hello World!!!'; END // CREATE PROCEDURE Hi_Stored_Procedure() BEGIN SELECT 'Hi!!!'; END //
Tạo procedure cha có logic IF:
CREATE PROCEDURE test(IN input INT)
BEGIN
IF input > 100 THEN
CALL Hello_Stored_Procedure();
ELSE
CALL Hi_Stored_Procedure();
END IF;
END //
Gọi procedure:
CALL test(110); -- Gọi Hello CALL test(50); -- Gọi Hi
Kết quả CALL test(110)
| Hello World!!! |
|---|
| Hello World!!! |
Lưu ý quan trọng
DELIMITER //thay đổi delimiter để định nghĩa proc có nhiều statement.END IF(2 từ) — khác vớiENDcủa procedure.CALLkhông trả về result set trực tiếp cho client trong một số driver — cần xử lý multiple result sets.- Transaction: Procedure cha không tự động transaction. Nếu cần atomic, dùng
START TRANSACTIONtrong proc cha. - Đệ quy: MySQL cho phép recursive procedure (cần
max_sp_recursion_depth> 0).
Best Practice
- Tránh logic phức tạp trong SP — chuyển sang application layer.
- Dùng SP cho: atomic operations, giảm network round-trip, bảo mật (grant EXECUTE không grant SELECT/INSERT).
- Document rõ ràng tham số, trả về, side effects.