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

Thiết lập điều kiện IF...ELSE trong Stored Procedure MySQL

Trong Stored Procedure của MySQL, câu lệnh IF ... THEN ... ELSE ... END IF cho phép thực thi logic phân nhánh dựa trên điều kiện. Đây là cấu trúc điều khiển luồng cơ bản để viết logic nghiệp vụ phức tạp bên trong database.

Cú pháp IF...ELSE

IF condition THEN
    statement_list1;
ELSE
    statement_list2;
END IF;

Có thể mở rộng thành IF ... THEN ... ELSEIF ... THEN ... ELSE ... END IF cho nhiều nhánh.

Ví dụ minh họa: Procedure nhận tham số và so sánh với 10

Tạo procedure:

mysql> DELIMITER //
mysql> CREATE PROCEDURE IF_ELSE_DEMO(IN value INT)
    BEGIN
        SET @val = value;
        IF @val > 10 THEN
            SELECT CONCAT(@val, ' is greater than 10');
        ELSE
            SELECT CONCAT(@val, ' is less than 10 ');
        END IF;
    END //
Query OK, 0 rows affected (0.16 sec)

mysql> DELIMITER ;

Gọi procedure với tham số 18

mysql> CALL IF_ELSE_DEMO(18);

Kết quả:

+------------------------------------+
| concat(@val,' is greater than 10') |
+------------------------------------+
| 18 is greater than 10              |
+------------------------------------+

Gọi procedure với tham số 5

mysql> CALL IF_ELSE_DEMO(5);
+-----------------------------------+
| concat(@val,' is less than 10 ')  |
+-----------------------------------+
| 5 is less than 10                 |
+-----------------------------------+

Các cấu trúc điều khiển khác trong MySQL Procedure

Cấu trúcMô tả
CASE WHEN ... THEN ... ELSE ... END CASEĐa nhánh, tương tự switch-case
WHILE condition DO ... END WHILEVòng lặp có điều kiện trước
REPEAT ... UNTIL condition END REPEATVòng lặp có điều kiện sau (chạy ít nhất 1 lần)
LOOP ... END LOOPVòng lặp vô tận, thoát bằng LEAVE
ITERATE labelBỏ qua đến lần lặp tiếp theo (như continue)
LEAVE labelThoát khỏi vòng lặp/khối (như break)

Ví dụ CASE WHEN

CREATE PROCEDURE grade_student(IN score INT)
BEGIN
    CASE
        WHEN score >= 90 THEN SELECT 'A';
        WHEN score >= 80 THEN SELECT 'B';
        WHEN score >= 70 THEN SELECT 'C';
        WHEN score >= 60 THEN SELECT 'D';
        ELSE SELECT 'F';
    END CASE;
END;

Lưu ý

  • Mọi câu lệnh trong procedure phải kết thúc bằng ;.
  • Biến cục bộ khai báo bằng DECLARE var_name TYPE [DEFAULT value]; ở đầu BEGIN.
  • Biến người dùng (@var) không cần DECLARE, tồn tại suốt session.
  • DELIMITER bắt buộc khi tạo procedure chứa nhiều câu lệnh.