MySQL中的存储过程

3

我正在PHPMyAdmin中运行以下命令:

DELIMITER #
CREATE PROCEDURE addid()
BEGIN
  DECLARE done INT DEFAULT 0;
  DECLARE a,b FLOAT DEFAULT 0;
  DECLARE c,d INT DEFAULT 0;
  DECLARE cur1 CURSOR FOR SELECT time FROM results;
  DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;

OPEN cur1;
  read_loop: LOOP
    FETCH cur1 INTO a;
    IF done THEN
      LEAVE read_loop;
    IF a - b > 60 THEN 
      SET c = c+1;
    ELSE
      UPDATE results SET uid=c WHERE time=a;
    END IF;
    SET b = a;
  END LOOP;
CLOSE cur1;
END#
DELIMITER ;
CALL addid();

也许它能做我想要的事情,也许不能。但是我不知道,因为我无法调用它。
我收到以下错误信息:
#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 'LOOP; CLOSE cur1; END# call addid()' at line 20

有时候,根据我的调整,我可以让创建过程运行起来,但是它找不到存储过程,好像根本没有创建。

这是我第一次使用存储过程,所以可能是一些愚蠢的错误。我正在运行 MySQL 5.0.7。


如果在结束语句中包含循环标签会发生什么情况? END LOOP read_loop; - cdhowie
1个回答

2

刚才我看到了你代码中可能存在的问题...

IF done THEN
      LEAVE read_loop;
END IF;

缺少endif。

十秒钟的谷歌搜索就可以找到LEAVE语句的文档。 - cdhowie
再多十秒钟,cdhowie 就会带你去更智能的投票。希望你足够聪明,给他点赞。 - Only You
FYI cdhowie..... 来自官方消息...... 何时应该投反对票?当你遇到一个极其粗糙、没有付出努力的帖子,或者一个明显且可能危险错误的答案时,请使用你的反对票。 - Only You
当鼠标悬停在“踩”按钮上时,工具提示会显示“此答案无用”。事实上,它完全没有用。既然你已经找到了真正的问题(缺少END IF),我已经编辑掉了你回答中不正确的部分,并转为点赞。 - cdhowie
是的,这是if语句的结尾。谢谢! - Justin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接