mysql中循环的sql标签

vaj7vani  于 2021-07-29  发布在  Java
关注(0)|答案(1)|浏览(306)

mysql的官方文档说使用label 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();

这是一个简单的循环,它发现即使是no.s的和也小于或等于10。但当我运行程序时,会生成以下错误消息:

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

可能出了什么问题?

3pmvbmvn

3pmvbmvn1#

你的循环基本上缺少一个标签。它应该在循环开始时声明,并在 ITERATE , LEAVE 以及 END 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 ;

db小提琴演示

相关问题