Mysql 错误1329:没有数据-获取、选择或处理的行数为零-即使所有操作都正确完成

Mysql 错误1329:没有数据-获取、选择或处理的行数为零-即使所有操作都正确完成,mysql,sql,stored-procedures,Mysql,Sql,Stored Procedures,在下面的代码中,我得到了“error1329:No data-zero rows-fetched、selected或processed”,即使所有操作都正确完成了。我的其他功能正常工作,几天前这个功能还可以正常工作 BEGIN DECLARE Id INT(10) DEFAULT '0'; DECLARE Elm INT(10) DEFAULT '0'; DECLARE ElmParent INT(10) DEFAULT '0'; DECLARE Type TIN

在下面的代码中,我得到了“error1329:No data-zero rows-fetched、selected或processed”,即使所有操作都正确完成了。我的其他功能正常工作,几天前这个功能还可以正常工作

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处理程序已经发出记录不足的信号的情况下不会执行FETCH


我不确定是什么原因导致了这种情况,但在这种情况下,将处理程序更改为更具体的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处理程序已经发出记录不足的信号的情况下不会执行FETCH