首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >不识别MYSQL而循环继续

不识别MYSQL而循环继续
EN

Stack Overflow用户
提问于 2018-02-28 16:36:13
回答 1查看 11.9K关注 0票数 6

我尝试跳过mysql循环中的一个条件,但它不起作用。

代码语言:javascript
运行
复制
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说语法不正确。

如果我换掉

继续

使用

离开

它有效,但结果不是我所需要的

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-28 17:17:51

ITERATE是你想要的。在评论中,你提到

迭代又是开始循环,从第一个值开始,我需要跳过一些值。

情况并非如此。迭代等价于连续的概念。您的循环“重新开始”(实际上,无限期地运行),因为最初您有:

代码语言:javascript
运行
复制
 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_4v1=4,然后输入如果,然后重新开始。由于这是一个while循环,您需要在if中自己减少v1,例如:

代码语言:javascript
运行
复制
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)
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49034402

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档