【发布时间】: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
我不明白这个脚本有什么问题
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
在 MySQL 中用 @ 声明变量并用 :=
SET @crs = 0; // declaration
--here your query
@crs := @crs+1 // assignment
参考文献
【讨论】:
BEGIN DECLARE crs INT; SET @crs = 0; WHILE crs < 10 DO INSERT INTO `continent`(`name`) VALUES ('cont'+@crs) SET @crs = crs + 1; END WHILE; END; 它也不是这样工作的
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();
【讨论】: