存储过程定义中的MySQL错误1064

Nik*_*Nik 1 mysql sql mysql-error-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
Run Code Online (Sandbox Code Playgroud)

我一直把头靠在墙上一段时间,非常感谢一些帮助.

Mar*_*c B 5

您尚未更改分隔符,因此第一个;遇到的分隔符将终止整个语句.

DELIMITER $$

CREATE PROCEDURE
    blah blah blah
END$$

DELIMITER ;
Run Code Online (Sandbox Code Playgroud)

通过这种方式更改分隔符,您可以安全地定义多语句过程,;在其中嵌入法线,然后使用"新"分隔符结束create语句.之后,您将恢复标准分隔符并照常继续.