2012-07-16 146 views
21

我不明白什么是错的这个脚本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个值到表大陆,但有一个错误在第二条线。

回答

30

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(); 
39

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

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

参考

+0

'BEGIN DECLARE CRS INT; SET @crs = 0; WHERE crs <10 DO INSERT INTO \ continent \'(\'name \')VALUES('cont'+ @ crs) SET @crs = crs + 1; END WHILE; END; '它不是以这种方式工作 – NiCU 2012-07-16 13:39:07

+0

分配':=' – diEcho 2012-07-16 13:40:51

+5

我得到的错误说:#1064 - 你的SQL语法错误;检查与你的MySQL服务器版本相对应的手册,在'DECLARE @crs INT'附近使用正确的语法, – NiCU 2012-07-16 13:43:42