Mysql语法错误创建存储过程

时间:2014-04-18 18:31:58

标签: mysql sql stored-procedures mysql-error-1064

这让我疯了。

 CREATE DEFINER=`root`@`localhost` PROCEDURE `CalcularCRTarea` (Id_Tarea INT, OUT crTarea decimal(12, 4))
    DETERMINISTIC
BEGIN
  DECLARE done BOOLEAN DEFAULT FALSE;
  DECLARE _id BIGINT UNSIGNED;
  DECLARE cur CURSOR FOR SELECT Id FROM Tarea_Frente where Id_Item_Tarea = Id_Tarea;
  DECLARE CONTINUE HANDLER FOR NOT FOUND SET done := TRUE;
  OPEN cur;
  testLoop: LOOP
    FETCH cur INTO _id;
    IF done THEN
      LEAVE testLoop;
    ELSE 
        CALL CalcularCRFrente(_id, @suma);
        SET crTarea = crTarea + @suma;
    END IF;
  END LOOP testLoop;

  CLOSE cur;      
END;

phpmyadmin给我回复

MySQL said: Documentation

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 4 

这就是行

  DECLARE done BOOLEAN DEFAULT FALSE;

这里有什么问题?我尝试了几个小的改动,我总是得到同样的错误。我检查了文档,但我没有看到语法错误。 我知道这是一个愚蠢的错误,但是我被困了半个小时。 是一个游标,它迭代每一行并为每一行执行存储过程;我已经用存储的函数完成了它(并且它像魅力一样)但是当时在服务器中发布我看到我的共享主机不支持存储的函数,只有存储过程:(所以它&# 39;这是我发现的最佳方式。

1 个答案:

答案 0 :(得分:6)

您缺少自定义delimiter指令。

当你错过它时,引擎在找到第一个默认语句终止符分号;时尝试编译语句。因此例外。

将您的整个例程置于其间:

-- define the delimiter
delimiter //


--- place here your stored procedure

-- and lastly following line
//

-- reset the delimiter
delimiter ;