Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Gọi Stored Procedure lồng nhau với logic IF trong MySQL

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ới END của procedure.
  • CALL khô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 TRANSACTION trong 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.