MySQL 存儲過程支援流程控制:IF、CASE、LOOP、WHILE、REPEAT、LEAVE、ITERATE。
DELIMITER $$
CREATE PROCEDURE myProc()
BEGIN
DECLARE counter INT DEFAULT 0;
simple_loop: LOOP
SET counter = counter + 1;
SELECT counter;
IF counter = 10 THEN
LEAVE simple_loop;
END IF;
END LOOP simple_loop;
SELECT 'I can count to 10';
END$$
DELIMITER ;
CALL myProc();
-- 輸出 1 到 10,最後輸出提示字符串
CREATE PROCEDURE myProc2()
BEGIN
DECLARE i INT DEFAULT 1;
myloop: LOOP
SET i = i + 1;
IF i = 10 THEN
LEAVE myloop;
END IF;
END LOOP myloop;
SELECT 'I can count to 10';
END
CREATE PROCEDURE increment(IN in_count INT)
BEGIN
DECLARE cnt INT DEFAULT 0;
inc_loop: LOOP
SET cnt = cnt + 1;
IF cnt < 20 THEN
ITERATE inc_loop; -- 跳過本輪剩餘,直接下一輪
END IF;
IF cnt > in_count THEN
LEAVE inc_loop; -- 退出循環
END IF;
END LOOP inc_loop;
SELECT cnt;
END
CALL increment(3); -- 輸出 20
| 關鍵字 | 作用 | 類比 |
|---|---|---|
LOOP ... END LOOP | 無條件循環 | while(true) |
LEAVE label | 跳出指定標籤循環 | break |
ITERATE label | 跳過本輪,進入下一輪 | continue |
WHILE condition DO ... END WHILE | 前置條件循環 | while |
REPEAT ... UNTIL condition END REPEAT | 後置條件循環 | do-while |
SELECT ... INTO @var 捕獲中間值,或啟用 general_log 追蹤。