我试图跳过循环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说语法不正确。
如果我更换
继续
同
离开
它工作,但结果不是我需要的
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_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)