[英]Mysql syntax error on stored procedure
I run this code as a sql script from command line, and I get "you have an error in your SQL syntax" almost in all lines! 我从命令行将这些代码作为sql脚本运行,并且几乎在所有行中都收到“您的SQL语法有错误”! Any ideas what is wrong here?
有什么主意在这里吗?
CREATE PROCEDURE updatemandate()
BEGIN
DECLARE _mandate_id BIGINT(20);
DECLARE _has_succesful_payment tinyint(1);
DECLARE done INT DEFAULT 0;
DECLARE cnt INT;
DECLARE mandateCursor CURSOR FOR Select mandate_id, has_succesful_payment From mandates;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
OPEN mandateCursor;
allmandates: LOOP
Fetch mandateCursor INTO _mandate_id, _has_succesful_payment;
IF done THEN LEAVE allmandates;
END IF;
Select COUNT(*) FROM payments WHERE mandate_id=_mandate_id AND status='OK' into cnt;
IF cnt>0 THEN
SET _has_succesful_payment=1;
END IF;
END LOOP allmandates;
CLOSE mandateCursor;
END
The ;
的
;
character is the default delimiter, so when MySQL sees the first ;
字符是默认的分隔符,因此当MySQL看到第一个分隔符时
;
it thinks you are done. 它认为您完成了。 When you create a sproc, you need to declare a different delimiter character, like so:
创建存储过程时,需要声明其他定界符,如下所示:
DELIMITER $$
CREATE PROCEDURE updatemandate()
READS SQL DATA
BEGIN
DECLARE _mandate_id BIGINT(20);
DECLARE _has_succesful_payment tinyint(1);
DECLARE done INT DEFAULT 0;
DECLARE cnt INT;
DECLARE mandateCursor CURSOR FOR Select mandate_id, has_succesful_payment From mandates;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
OPEN mandateCursor;
allmandates: LOOP
Fetch mandateCursor INTO _mandate_id, _has_succesful_payment;
IF done THEN LEAVE allmandates;
END IF;
Select COUNT(*) FROM payment WHERE mandate_id=_mandate_id AND status='OK' into cnt;
IF cnt>0 THEN
SET _has_succesful_payment=1;
END IF;
END LOOP allmandates;
CLOSE mandateCursor;
END$$
DELIMITER ;
Also a good idea to add the READS SQL DATA
to the sproc definition in case you need to support binary logging . 在需要支持二进制日志记录的情况下 ,将
READS SQL DATA
添加到sproc定义中也是一个好主意。
您是否尝试过将delimiter //
放在CREATE
语句之前,并用END //
更改最后一行?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.