【问题标题】:MYSQL declaring variablesMYSQL 声明变量
【发布时间】:2016-05-13 14:34:31
【问题描述】:

我不明白这个脚本有什么问题

BEGIN
DECLARE crs INT DEFAULT 0;

WHILE crs < 10 DO
INSERT INTO `continent`(`name`) VALUES ('cont'+crs)
SET crs = crs + 1;
END WHILE;
END;

我希望它在大陆表中插入 10 个值,但第二行出现错误。

【问题讨论】:

    标签: mysql


    【解决方案1】:

    在 MySQL 中用 @ 声明变量并用 :=

    赋值
    SET @crs = 0; // declaration
    --here your query
    @crs := @crs+1 // assignment
    

    参考文献

    【讨论】:

    • BEGIN DECLARE crs INT; SET @crs = 0; WHILE crs &lt; 10 DO INSERT INTO `continent`(`name`) VALUES ('cont'+@crs) SET @crs = crs + 1; END WHILE; END; 它也不是这样工作的
    • 我得到的错误是:#1064 - 你的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,了解在“DECLARE @crs INT”附近使用的正确语法
    • -1 因为会话变量不是提问者想要的块范围变量。无论如何,匿名块不适用于 MySQL :(
    【解决方案2】:

    MySQL 不支持匿名存储过程代码块的执行。

    您需要创建一个包含该代码的存储过程,然后调用它。

    此外,您在插入语句末尾缺少分号。我修好了。您可能还想使用 concat() 而不是 + 来生成名称,但我会将更改留给您。

    创建过程:

    DELIMITER $$
    
    DROP PROCEDURE IF EXISTS insert_ten_rows $$
    
    CREATE PROCEDURE insert_ten_rows () 
        BEGIN
            DECLARE crs INT DEFAULT 0;
    
            WHILE crs < 10 DO
                INSERT INTO `continent`(`name`) VALUES ('cont'+crs);
                SET crs = crs + 1;
            END WHILE;
        END $$
    
    DELIMITER ;
    

    调用过程:

    CALL insert_ten_rows();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-08-17
      • 1970-01-01
      • 2022-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多