สร้าง Stored Procedure แบบ REPEAT UNTIL
mysql> DELIMITER //
mysql> CREATE PROCEDURE do_WhileDemo(LastValue INT)
-> BEGIN
-> SET @loop = 0;
-> REPEAT
-> SET @loop = @loop + 1;
-> SELECT @loop;
-> UNTIL @loop > LastValue
-> END REPEAT;
-> END //
Query OK, 0 rows affected (0.17 sec)
mysql> DELIMITER ;
เรียกใช้ Stored Procedure
mysql> CALL do_WhileDemo(10);
ผลลัพธ์ (แสดงค่า 1 ถึง 11)
+-------+
| @loop |
+-------+
| 1 |
+-------+
1 row in set (0.00 sec)
... (ซ้ำจนถึง 11)
+-------+
| @loop |
+-------+
| 11 |
+-------+
1 row in set (0.09 sec)
Query OK, 0 rows affected (0.10 sec)
โครงสร้างลูปใน MySQL
| ลูป | รูปแบบ | ตรวจสอบเงื่อนไข |
| WHILE | WHILE condition DO ... END WHILE | ก่อนเข้าลูป (pre-test) |
| REPEAT | REPEAT ... UNTIL condition END REPEAT | หลังรันลูปแล้ว (post-test) - รันอย่างน้อย 1 ครั้ง |
| LOOP | LOOP ... END LOOP | ไม่มีเงื่อนไข ต้องใช้ LEAVE |
ตัวอย่าง WHILE LOOP
CREATE PROCEDURE while_demo(max_val INT)
BEGIN
DECLARE i INT DEFAULT 1;
WHILE i <= max_val DO
SELECT i;
SET i = i + 1;
END WHILE;
END
ตัวอย่าง LOOP + LEAVE
CREATE PROCEDURE loop_demo(max_val INT)
BEGIN
DECLARE i INT DEFAULT 1;
my_loop: LOOP
IF i > max_val THEN
LEAVE my_loop;
END IF;
SELECT i;
SET i = i + 1;
END LOOP;
END
คำแนะนำ
- ใช้
DELIMITER // ก่อนสร้าง procedure และ DELIMITER ; หลังเสร็จ
- ใช้
DECLARE สำหรับตัวแปร local (ไม่ต้องมี @)
- ใช้
LEAVE label_name เพื่อออกจากลูปก่อนเวลา
- ใช้
ITERATE label_name เพื่อข้ามรอบปัจจุบันไปรอบถัดไป