MYSQL WHILE LOOP CONTINUE无法识别

时间:2018-02-28 16:36:13

标签: mysql database syntax

我尝试跳过循环mysql中的一个条件,它不起作用

DELIMITER // 
CREATE PROCEDURE loop_2()
BEGIN
    DECLARE v1 INT;
    DECLARE res TEXT;
    SET v1 = 5;
    SET res = "ok ";
    loop_4: WHILE v1 > 0 DO
        IF (v1 = 4) THEN
            CONTINUE loop_4;
        END IF;
        SET res = CONCAT(res, ", ", v1);
        SET v1 = v1 - 1;
    END WHILE loop_4;
    SELECT res;
END;

我等待结果,如“res:5,3,2,1”(4被跳过),但是mysql说语法不正确。

如果我更换

  

继续

  

LEAVE

它有效,但结果不是我需要的

1 个答案:

答案 0 :(得分:2)

ITERATE就是你想要的。在评论中,您提到了

  

ITERATE再次启动循环,从第一个值开始,我需要跳过一些值

事实并非如此。 ITERATE相当于continue的概念。你的循环是“重新开始”(真的,无限期地运行)因为你最初有:

 loop_4: WHILE v1 > 0 DO
        IF (v1 = 4) THEN
            CONTINUE loop_4;
        END IF;
        SET res = CONCAT(res, ", ", v1);
        SET v1 = v1 - 1;
    END WHILE loop_4;

其中说,当v1为4时,请返回loop_4 - 此处的v1值不变,因此loop_4v1=4无效返回v1 1}}然后输入if if并重新开始。由于这是一个while循环,你需要自己在if内部递减mysql> delimiter $$ mysql> CREATE PROCEDURE loop_2() -> BEGIN -> DECLARE v1 INT; -> DECLARE res TEXT; -> SET v1 = 5; -> SET res = "ok "; -> loop_4: WHILE v1 > 0 DO -> IF (v1 = 4) THEN -> SET v1 = v1 - 1; -> ITERATE loop_4; -> END IF; -> SET res = CONCAT(res, ", ", v1); -> SET v1 = v1 - 1; -> END WHILE loop_4; -> SELECT res; -> END $$ Query OK, 0 rows affected (0.00 sec) mysql> delimiter ; mysql> call loop_2(); +-----------------+ | res | +-----------------+ | ok , 5, 3, 2, 1 | +-----------------+ 1 row in set (0.00 sec) Query OK, 0 rows affected (0.00 sec) ,例如:

for (int key = 1; key >= 100; key++)