无法识别MYSQL WHILE LOOP CONTINUE
我试图跳过循环mysql中的一个条件,但它不起作用无法识别MYSQL WHILE LOOP CONTINUE,mysql,database,syntax,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
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相当于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
,然后输入该if并重新开始。由于这是一个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)
似乎您想要迭代?-我相信您仍然需要递减。如果
ITERATE
是跳过当前条件,我的意思是4?ITERATE
是再次开始循环,从第一个值开始,我需要跳过一些值,正如我提到的,您仍然需要递减v1
。请看我的答案。您是否可以修改我的示例(代码),以帮助我理解其含义?但如果条件类似于(var=“abc”)
,则操作是相同的?