MYSQL WHILE LOOP CONTINUE无法识别

问题描述 投票:1回答:1

我试图跳过循环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说语法不正确。

如果我更换

继续

离开

它工作,但结果不是我需要的

mysql database syntax
1个回答
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然后输入,如果并重新开始。由于这是一个while循环,你需要在if内部减少v1,例如:

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)
© www.soinside.com 2019 - 2024. All rights reserved.