2013-08-24 56 views
1

在下面,我得到「錯誤1329:沒有數據 - 零行被讀取,選擇或處理」,即使全部正確完成。我的其他職能工作,並且這個同樣的功能在幾天前​​運行良好。錯誤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

回答

7

我不知道是什麼原因造成這一點,但改變你的處理程序,以更具體的SQL錯誤在這種情況下可能會奏效

DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET updateDone = 1; 

您可以嘗試SWITH的如果和取

IF updateDone =1 THEN 
     LEAVE doUpdate; 
    END IF; 

    FETCH updater INTO Id, Elm, ElmParent, Type, Processed, Country; 

這確保FETCH沒有在CONTINE HANDLER已經暗示你出的記錄的情況下執行。

solution at least found in here

相關問題