MySQL 中的循环标签

Label for Loop in MySQL

MySQL 的官方文档说 LOOP 语句使用标签是可选的。但是当我在没有标签的存储过程中使用LOOP语句时,出现了错误。 SQL脚本文件如下:

DELIMITER $$

DROP PROCEDURE IF EXISTS loop_demo $$
CREATE PROCEDURE loop_demo()
BEGIN
    DECLARE i INT;
    DECLARE sum INT;
    SET i = 0;
    SET sum = 0;
    LOOP
        IF i > 10 THEN LEAVE ;
        END IF;
        SET i = i + 1;
        IF (i MOD 2) THEN ITERATE ;
        ELSE
            SET sum = sum + i;
        END IF;
    END LOOP;
    SELECT sum;
END $$

DELIMITER ;

CALL loop_demo();

这是一个简单的循环,它找到小于或等于 10 的偶数 no.s 的总和。但是当我 运行 程序生成以下错误消息时:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ';
        END IF;
        SET i = i + 1;
        IF (i MOD 2) THEN ITERATE ;
        ELSE
        ' at line 8

哪里出了问题?

您基本上缺少循环标签。它应该在循环开始时声明,并在 ITERATELEAVEEND LOOP 语句中引用。我还建议不要将变量命名为 sum,因为它与 SQL 关键字冲突。

考虑:

DELIMITER $$

CREATE PROCEDURE loop_demo()
BEGIN
    DECLARE i INT;
    DECLARE sm INT;
    SET i = 0;
    SET sm = 0;
    lbl: LOOP
        IF i > 10 THEN LEAVE lbl;
        END IF;
        SET i = i + 1;
        IF (i MOD 2) THEN ITERATE lbl;
        ELSE
            SET sm = sm + i;
        END IF;
    END LOOP lbl;
    SELECT sm;
END $$

DELIMITER ;

Demo on DB Fiddle