存储过程继续处理程序错误



我没有到达语法错误的地方,MySql 说未知系统可验证完成:分隔符 |

CREATE PROCEDURE UPDATELOMON ()    
BEGIN 
  DECLARE First_cur CURSOR FOR SELECT oraginal_level,level FROM LOMTEMP;
  DECLARE CONTINUE HANDLER FOR NOT FOUND SET done := TRUE;
  OPEN First_cur;
  FirstLoop: LOOP
  FETCH First_cur INTO oraginal,toupdate;
  IF done THEN
  LEAVE FirstLoop;
  END IF;
  CALL updt(oraginal,toupdate);
  END LOOP FirstLoop;
  CLOSE First_cur;
END;
创建存储

过程时需要更改分隔符:

DELIMITER $$
DROP PROCEDURE IF EXISTS UPDATELOMON$$
CREATE PROCEDURE UPDATELOMON ()    
BEGIN 
  DECLARE First_cur CURSOR FOR SELECT oraginal_level,level FROM LOMTEMP;
  DECLARE CONTINUE HANDLER FOR NOT FOUND SET done := TRUE;
  OPEN First_cur;
  FirstLoop: LOOP
  FETCH First_cur INTO oraginal,toupdate;
  IF done THEN
  LEAVE FirstLoop;
  END IF;
  CALL updt(oraginal,toupdate);
  END LOOP FirstLoop;
  CLOSE First_cur;
END$$
DELIMITER ;
默认情况下,MySQL

本身将分号识别为语句分隔符,因此您必须暂时重新定义分隔符,以使MySQL将整个存储的程序定义传递给服务器。否则,MySQL会在到达END语句之前破坏CREATE PROCEDURE(在第一个分号上,在您的情况下,在CONTINUE HANDLER语句之前)。

有关更多详细信息,请参阅文档:http://dev.mysql.com/doc/refman/5.5/en/stored-programs-defining.html

关于@Zagor23的答案。您可以在DROP PROCEDURE...行中删除$$并在其后放置DELIMITER $$。因此,您将拥有以下内容:

DROP PROCEDURE IF EXISTS UPDATELOMON;
DELIMITER $$

最新更新