【问题标题】:MySQL error on SETSET上的MySQL错误
【发布时间】:2015-03-11 21:41:25
【问题描述】:

每次我尝试运行此查询时,都会在附近出现 MySQL 错误

'BEGIN SET @v1 = 60000' at line 3

我不知道我做错了什么,感谢您的帮助!

CREATE PROCEDURE insertgear

BEGIN
   SET @v1 = 60000;
   WHILE v1 < 61000 DO
     <insert statement>
     SET v1 = v1 + 1
   END WHILE;
END

CALL insertgear

*EDIT 我从 60000 开始的原因是因为我在插入中使用该数字作为 ID

【问题讨论】:

    标签: mysql sql database stored-procedures


    【解决方案1】:

    您需要声明v1 并稍微整理一下语法,例如

    CREATE PROCEDURE insertgear()
    
    BEGIN
        DECLARE v1 int;
        SET v1 = 60000;
        WHILE v1 < 61000 DO
            <insert statement>
            SET v1 = v1 + 1;
        END WHILE;
    END
    

    【讨论】:

    • 谢谢,添加了这些更改,但仍然收到错误BEGIN DECLARE @v1 int at line 3
    • @前缀用于mysql中的会话变量,我已经相应地修改了答案
    【解决方案2】:

    需要先声明,我会使用 := 因为 = 在查询中被评估为比较运算符。不是 set v1 = 6000 是一个查询,而是为了保持一致性。这似乎在 sqlfiddle 中有效,http://sqlfiddle.com/#!9/7be13/1

    CREATE PROCEDURE insertgear()
    BEGIN
        DECLARE v1 int DEFAULT 1;
        SET v1 := 60000;
    
        WHILE v1 < 61000 DO
            <insert stm>
            SET v1 := v1 + 1;
        END WHILE;
    
    END
    //
    
    call insertgear();
    

    【讨论】:

    • 感谢您的回复,我收到与@TobyLL 评论相同的错误
    • 你现在还明白吗?它似乎在 sqfiddle 中工作。
    猜你喜欢
    • 2017-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-14
    • 1970-01-01
    • 2020-10-06
    • 1970-01-01
    相关资源
    最近更新 更多