2012-07-16 25 views
21

私はそれがテーブル大陸に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; 

と間違っているものを得ることはありません。

答えて

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

' DECLAREのCRSのINTをBEGIN; SET @crs = 0; WHILE crs <10 DO INSERT INTO \ 'continent \ '(\' name \ ')VALUES(' cont '+ @ crs) SET @crs = crs + 1; ENDLILE; ; END; 'それはこのように働いていません。 – NiCU

+0

':= ' – diEcho

+5

というエラーが表示されます。#1064 - あなたはSQL構文にエラーがあります。あなたのMySQLサーバのバージョンに対応するマニュアルをチェックし、正しい構文が 'DECLARE @crs INT' – NiCU