首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >打圈的时候怎么做?

打圈的时候怎么做?
EN

Database Administration用户
提问于 2014-04-09 10:35:19
回答 2查看 64.5K关注 0票数 7

我们如何在MySQL中使用we循环?我的测试脚本:

代码语言:javascript
复制
BEGIN
    SELECT 0 INTO @n;
    WHILE @n < 10 DO
    SELECT @n;
    SET @n := @n +1;
    END WHILE;
END;

但它有语法错误。我正在使用标准查询窗口中的SQLyog客户机运行这个循环。语法错误的形式如下:

错误代码: 1064 您的SQL语法有错误;请检查与MySQL服务器版本相对应的手册,以获得正确的语法。

我还尝试使用https://dev.mysql.com/doc/refman/5.6/en/while.html提供的work循环示例,但它仍然没有工作。

剧本的哪一部分是错的?(使用MySQL 5.6.)

我试图对一些数据做一个6个月的移动平均值,所以我希望一个while循环能够通过循环的每一次迭代将“新的”6个月的平均值附加到“旧的”6个月的平均值上。

EN

回答 2

Database Administration用户

回答已采纳

发布于 2015-07-04 03:37:46

如果没有存储过程,就不能在SQL编辑器中执行for循环。我用MySQL Workbench做这个。

快速存储过程应该完成以下工作:

代码语言:javascript
复制
DROP PROCEDURE IF EXISTS proc_loop_test;
CREATE PROCEDURE proc_loop_test()
BEGIN
  DECLARE int_val INT DEFAULT 0;
  test_loop : LOOP
    IF (int_val = 10) THEN
      LEAVE test_loop;
    END IF;

    SET int_val = int_val +1;
    SELECT int_val; 
  END LOOP; 
END;
票数 13
EN

Database Administration用户

发布于 2019-11-19 16:48:45

尽管从官方文档和其他堆栈交换站点的答案中找到了复制粘贴示例,但我还是遇到了mysql工作台中令人困惑的语法错误抱怨。如果您有一个被分解成多行的长查询(为了提高人的可读性),那么您可能需要使用分隔符来使机器更清楚地知道哪些换行符是“有意义的”。

mysql工作台为我同步接受的过程中的多行查询(尽管是编辑的)的一个示例。

代码语言:javascript
复制
DELIMITER //
DROP PROCEDURE IF EXISTS methodLoop;
CREATE PROCEDURE methodLoop(p1 INT)
BEGIN
    label1: LOOP
        SET p1 = p1-1;
        IF p1 > 0 THEN

            SELECT *
            FROM Table1 foo
            LEFT JOIN Table 2 bar ON foo.id = bar.id;

        END IF;

    END LOOP label1;
END//

DELIMITER ;

call methodLoop(10);

https://stackoverflow.com/questions/52412225/mysql-create-insert-procedure-statement-incomplete

票数 1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/62812

复制
相关文章

相似问题

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