2012-04-15 10 views
1

私はMySQLの手順が初めてです。私は単にデータセット上でカーソルを動かそうとしていて、行ごとに別の手順を実行しています(私は作品を知っています)。私は以下の行3にエラーコード1064を取得しています:私はしばらくの間、壁に頭を強打されていると非常にいくつかの助けをいただければ幸いですストアドプロシージャ定義でのMySQLエラー1064

CREATE PROCEDURE `safecycle`.`sp_aggregateAllPORDaily`() 
BEGIN 
    DECLARE done INT DEFAULT FALSE; 
    DECLARE porID SMALLINT UNSIGNED; 
    DECLARE cur1 CURSOR FOR SELECT ID FROM point_of_recycle; 
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; 

    OPEN cur1; 

    read_loop: LOOP 
    FETCH cur1 INTO porID; 
    IF done THEN 
     LEAVE read_loop; 
    END IF; 
    CALL sp_aggregatePORDaily(porID); 
    END LOOP; 

    CLOSE cur1; 
END 

答えて

5

区切り文字を変更していないので、最初に;が遭遇すると文全体が終了します。

DELIMITER $$ 

CREATE PROCEDURE 
    blah blah blah 
END$$ 

DELIMITER ; 

区切りをこのように変更することで、あなたは安全に内の正常;を埋め込む、あなたの複数文のプロシージャを定義して、「新しい」区切り文字でステートメントを作成終了することができます。その後、標準の区切り文字を復元し、通常どおりに続行します。

+0

はい、ありがとうございます。 – Nik

+0

非常に奇妙なsqlyogを使って ';'でデリミタを生成する実際にはコマンドラインから実行すると、実際には文全体が終了する可能性があります。 – shashi009