ใน MySQL Stored Procedure สามารถใช้คำสั่งควบคุมเงื่อนไข IF ... THEN ... ELSE ... END IF เพื่อทำ Logic แบบ分支 (Branching) ได้ ซึ่งคล้ายภาษาโปรแกรมทั่วไป
ไวยากรณ์
IF condition THEN
statement1;
ELSE
statement2;
END IF;
รองรับ ELSEIF ด้วย:
IF condition1 THEN
statement1;
ELSEIF condition2 THEN
statement2;
ELSE
statement3;
END IF;
ตัวอย่างการใช้งาน
สร้าง Procedure รับ Parameter แล้วเช็คค่า:
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 ;
เรียก Procedure ด้วยค่าต่างๆ:
mysql> CALL IF_ELSE_DEMO(18); +------------------------------------+ | CONCAT(@val, ' is greater than 10') | +------------------------------------+ | 18 is greater than 10 | +------------------------------------+ mysql> CALL IF_ELSE_DEMO(5); +-----------------------------------+ | CONCAT(@val, ' is less than 10 ') | +-----------------------------------+ | 5 is less than 10 | +-----------------------------------+
คำสั่งควบคุมอื่นๆ ใน Stored Procedure
| คำสั่ง | คำอธิบาย |
|---|---|
| CASE WHEN ... THEN ... END CASE | เงื่อนไขหลายทางเลือก (คลาย Switch) |
| WHILE condition DO ... END WHILE | ลูปวนซ้ำตรวจสอบเงื่อนไขก่อน |
| REPEAT ... UNTIL condition END REPEAT | ลูปวนซ้ำตรวจสอบเงื่อนไขท้าย (อย่างน้อย 1 รอบ) |
| LOOP ... END LOOP | ลูปไม่มีเงื่อนไข (ใช้ LEAVE ออก) |
| ITERATE label | ข้ามรอบปัจจุบัน ไปรอบถัดไป |
| LEAVE label | ออกจาก Loop/Block |
แนวทางปฏิบัติที่ดี
- ใช้ DELIMITER เปลี่ยนตัวคั่นคำสั่งก่อน CREATE PROCEDURE
- ใช้ BEGIN ... END บล็อกหลายคำสั่ง
- ประกาศตัวแปรด้วย
DECLARE var_name TYPE DEFAULT value; - ตั้งชื่อ Parameter ให้ชัดเจน (IN, OUT, INOUT)
- เพิ่ม Comment อธิบาย Logic ซับซ้อน
การ Debug Procedure
- ใช้
SELECT 'Debug: ', variable;พิมพ์ค่าระหว่างรัน - MySQL Workbench มี Debugger สำหรับ Stored Procedure
- เขียน Log ลงตาราง Debug แยกต่างหาก