2017-07-12 15 views
1

内のif文でストアドプロシージャを作成しようとしました。 コピー元:https://dev.mysql.com/doc/refman/5.7/en/local-variable-scope.htmlMySQL構文エラー - END IF行

しかし、私はEND IFで正確に次のエラーを受け取ります。 「」に近い:

DROP PROCEDURE IF EXISTS `myProc`; 
CREATE DEFINER=`root`@`%` PROCEDURE `myProc`(
    IN in_userId int, 
    IN in_projectId int 
) 
BEGIN 
    DECLARE tmp_courseId int; 
    DECLARE done TINYINT DEFAULT 0; 
    DECLARE cursorProjectCourse CURSOR FOR SELECT CourseId FROM XC_PROJECT_COURSE where projectId = in_projectId ; 
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1; 

    OPEN cursorProjectCourse; 

    read_loop: LOOP 

     FETCH FROM cursorProjectCourse INTO tmp_courseId; 

     IF done = 1 THEN LEAVE read_loop; 

     END IF; 

     SELECT tmp_courseId, in_userId; 
    END LOOP; 
    CLOSE cursorProjectCourse; 
END; 

は、私はミスを犯す誰のアイデアを持って?

正確なエラーメッセージ:

SQLエラー[1064] [42000]:あなたはあなたのSQL構文でエラーが発生しています。助けのための 5.5.46

ありがとう:19行SQLエラー

MySQLバージョンで「」の近くに使用する権利 構文についてはMySQLサーバのバージョンに対応 マニュアルを確認してください!

答えて

1

解決策が見つかりました。 私は、最初の文でDELIMITER $$を設定する必要があり、エンドDELIMITER ;

DELIMITER $$; 
DROP PROCEDURE IF EXISTS `myProc`; $$ 
CREATE DEFINER=`root`@`%` PROCEDURE `myProc`(
    IN in_userId int, 
    IN in_projectId int 
) 
BEGIN 
    DECLARE tmp_courseId int; 
    DECLARE done TINYINT DEFAULT 0; 
    DECLARE cursorProjectCourse CURSOR FOR SELECT CourseId FROM XC_PROJECT_COURSE where projectId = in_projectId ; 
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1; 

    OPEN cursorProjectCourse; 

    read_loop: LOOP 

     FETCH FROM cursorProjectCourse INTO tmp_courseId; 

     IF done = 1 THEN LEAVE read_loop; 

     END IF; 

     SELECT tmp_courseId, in_userId; 
    END LOOP; 
    CLOSE cursorProjectCourse; 
END;$$ 
DELIMITER ; 

でラインの最初の位置にキーワードを設定することが重要です。最初の位置に空白がある場合、上記のエラーがスローされます。

0

ループを終了している間、ループラベルが表示されません。

read_loop: LOOP 
    FETCH FROM cursorProjectCourse INTO tmp_courseId; 
    IF done = 1 THEN 
    LEAVE read_loop; 
    END IF; 
END LOOP read_loop; 
    SELECT tmp_courseId, in_userId; 
+0

このケースを明示的に試みましたが、動作しません。 –

+0

私はEND IFステートメント(同じ行など)を配置するための他のソリューションも試しましたが、それでも動作しません。 –

+0

@NorbertKoch、前の回答を無視...編集を参照してください。それが役に立てば幸い。 – Rahul