Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法识别MYSQL WHILE LOOP CONTINUE_Mysql_Database_Syntax - Fatal编程技术网

无法识别MYSQL WHILE LOOP CONTINUE

无法识别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

我试图跳过循环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相当于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”)
,则操作是相同的?