Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

การตั้งเงื่อนไขใน MySQL Stored Procedure ด้วย IF...ELSE

ใน 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 แยกต่างหาก