和REPEAT和while語句不同,LOOP、LEAVE、ITERATE更像其他編程語言中的goto語句。 LOOP要設定一個label指定循環的開始位置,而LEAVE則像其他語言中的Break會離開LOOP指定的塊,iterate則像其他語言中的Continue會再次回到LOOP開始的語句。
如下是一個使用LOOP語句的mysql存儲過程:
DELIMITER $$
DROP PROCEDURE IF EXISTS LOOPLoopProc$$ CREATE PROCEDURE LOOPLoopProc() BEGIN DECLARE x INT; DECLARE str VARCHAR(255); SET x = 1; SET str = ''; loop_label: LOOP IF x > 10 THEN LEAVE loop_label; END IF; SET x = x + 1; IF (x mod 2) THEN ITERATE loop_label; ELSE SET str = CONCAT(str,x,','); END IF; END LOOP; SELECT str; END$$ DELIMITER ;
在上面存儲過程中我們首先在LOOP語句開始前聲明了一個loop_label,然后在if語句總判斷變量x是否大於10,如果大於10會使用LEAVE語句退出循環,而如果x是奇數時則會回到循環開始繼續執行,這有點像continue語句,否則對str執行concat操作,並進入下一次循環。