我尝试跳过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说语法不正确。
如果我换掉
继续
使用
离开
它有效,但结果不是我所需要的
发布于 2018-02-28 17:17:51
ITERATE是你想要的。在评论中,你提到
迭代又是开始循环,从第一个值开始,我需要跳过一些值。
情况并非如此。迭代等价于连续的概念。您的循环“重新开始”(实际上,无限期地运行),因为最初您有:
 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_4和v1=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)https://stackoverflow.com/questions/49034402
复制相似问题