23

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

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 个值插入到大陆表中,但第二行有错误。

4

2 回答 2

37

在 MySQL 中声明变量@并赋值:=

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

参考

于 2012-07-16T13:36:52.023 回答
36

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();
于 2012-07-16T14:33:21.050 回答