MySQL มีคำสั่ง LOOP ที่รันบล็อกโค้ดซ้ำๆ พร้อมความยืดหยุ่นในการใช้ Label ของ Loop เรามีคำสั่ง 2 คำสั่งที่ช่วยควบคุม Loop ดังนี้:
คำสั่ง LEAVE
ช่วยให้เราออกจาก Loop ทันทีโดยไม่ต้องรอตรวจสอบเงื่อนไข
คำสั่ง ITERATE
ช่วยให้เราข้ามโค้ดทั้งหมดภายใต้คำสั่งนี้และเริ่มรอบการวนซ้ำใหม่
เพื่อสาธิตการใช้คำสั่ง LOOP ร่วมกับ Stored Procedure ต่อไปนี้เป็น Stored Procedure ที่สร้างสตริงด้วยเลขคู่ เช่น 2,4,6,8 เป็นต้น:
mysql> Delimiter //
mysql> CREATE PROCEDURE LOOP_loop()
-> BEGIN
-> DECLARE A INT;
-> DECLARE XYZ VARCHAR(255);
-> SET A = 1;
-> SET XYZ = '';
-> loop_label: LOOP
-> IF A > 10 THEN
-> LEAVE loop_label;
-> END IF;
-> SET A = A + 1;
-> IF (A mod 2) THEN
-> ITERATE loop_label;
-> ELSE
-> SET XYZ = CONCAT(XYZ,A,',');
-> END IF;
-> END LOOP;
-> SELECT XYZ;
-> END //
Query OK, 0 rows affected (0.07 sec)
ตอนนี้เราสามารถดูผลลัพธ์เมื่อเรียกใช้ Procedure นี้:
mysql> DELIMITER ; mysql> CALL LOOP_loop (); +-------------+ | XYZ | +-------------+ | 2,4,6,8,10, | +-------------+ 1 row in set (0.04 sec) Query OK, 0 rows affected (0.04 sec)
ในคำสั่งข้างต้น หากค่าของ A มากกว่า 10 Loop จะสิ้นสุดลงเนื่องจากคำสั่ง LEAVE หากค่าของ A เป็นเลขคี่ คำสั่ง ITERATE จะข้ามทุกอย่างด้านล่างและเริ่มรอบใหม่ หากค่าของ A เป็นเลขคู่ บล็อกในคำสั่ง ELSE จะสร้างสตริงด้วยเลขคู่