[begin_label:] BEGIN
[statement_list]
END [end_label]
默認分號 `;` 是語句結束符,存儲過程體內部也需要分號,必須臨時修改定界符:
DELIMITER //
CREATE PROCEDURE demo_proc()
BEGIN
DECLARE v INT DEFAULT 0;
WHILE v < 5 DO
INSERT INTO test_log(msg) VALUES (CONCAT('Loop ', v));
SET v = v + 1;
END WHILE;
END //
DELIMITER ;
工具提示: Navicat、DBeaver、MySQL Workbench 等 GUI 工具通常自動處理定界符,無需手動輸入 `DELIMITER`。
CREATE PROCEDURE label_demo()
main_block: BEGIN
DECLARE i INT DEFAULT 0;
loop_label: LOOP
SET i = i + 1;
IF i = 3 THEN
ITERATE loop_label; -- 跳過本次循環剩餘部分
END IF;
INSERT INTO test_log(msg) VALUES (CONCAT('i = ', i));
IF i >= 5 THEN
LEAVE main_block; -- 直接跳出外層 BEGIN...END
END IF;
END LOOP loop_label;
INSERT INTO test_log(msg) VALUES ('After loop');
END