在下面,即使所有操作都正确完成,我也会收到“错误 1329:无数据 - 提取、选择或处理零行”。我的其他功能可以正常工作,几天前这个功能也可以正常工作。
BEGIN
DECLARE Id INT(10) DEFAULT '0';
DECLARE Elm INT(10) DEFAULT '0';
DECLARE ElmParent INT(10) DEFAULT '0';
DECLARE Type TINYINT(1) DEFAULT '0';
DECLARE Processed TINYINT(1) DEFAULT '0';
DECLARE Country VARCHAR(2) DEFAULT "";
DECLARE updateDone INT DEFAULT 0;
DECLARE Increment TINYINT(1) DEFAULT '0';
-- declare cursor
DEClARE updater CURSOR FOR
SELECT id, klm, parent, type, processed, countryCode FROM votes where voteProcessed=0;
-- declare NOT FOUND handler
DECLARE CONTINUE HANDLER FOR NOT FOUND SET updateDone = 1;
OPEN updater;
doUpdate: LOOP
FETCH updater INTO Id, Elm, ElmParent, Type, Processed, Country;
IF updateDone =1 THEN
LEAVE doUpdate;
END IF;
IF Type = 0 THEN
SET Increment = 1;
ELSEIF Type = 1 THEN
SET Increment = -1;
END IF;
-- update likes
update likes set votes=votes+Increment where id=Elm and parent = ElmParent and country=Country;
update votes set voteProcessed = 1 where id=Id;
END LOOP doUpdate;
CLOSE updater;
END
我在这里错过了什么吗?我正在使用 MySQL 版本 5.5.25
我不确定是什么原因造成的,但在这种情况下将处理程序更改为更具体的 SQL 错误可能会起作用
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET updateDone = 1;
您可以尝试切换 if 然后 fetch
IF updateDone =1 THEN
LEAVE doUpdate;
END IF;
FETCH updater INTO Id, Elm, ElmParent, Type, Processed, Country;
这可以确保在 CONTINE HANDLER 已经发出记录不足的情况下不会执行 FETCH。
至少在这里找到解决方案 http://bugs.mysql.com/bug.php?id=42834
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)