MySQL语法错误 - END IF行

时间:2017-07-12 10:03:59

标签: mysql sql

我尝试在其中创建一个带有if语句的存储过程。 我复制了:https://dev.mysql.com/doc/refman/5.7/en/local-variable-scope.html

但是我在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语法出错;校验   与您的MySQL服务器版本对应的手册   要在''附近使用的语法第19行SQL错误

MySQL版本: 46年5月5日

感谢您的帮助!

2 个答案:

答案 0 :(得分:3)

我找到了解决方案。 我必须在第一个语句和最后c.insets = new Insets(5, 10, 5, 10); // top, left, bottom, right padding

设置DELIMITER $$
DELIMITER ;
  

将关键字设置在第一个位置非常重要。如果第一个位置上有空白,则会抛出上述错误。

答案 1 :(得分: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;