我尝试跳过循环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
它有效,但结果不是我需要的
答案 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_4
将v1=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++)