2012-07-16 176 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