mysql利用游标循环删除数据报错:No data - zero rows fetched

作者: 爱上双眼皮儿的猫 2017-02-23 09:35:37

第一次用MySQL的游标来循环处理数据,编写的存储过程如下:


DROP PROCEDURE IF EXISTS delete_Menu;  


DELIMITER $$ 


CREATE PROCEDURE delete_Menu( IN menuCode VARCHAR(200))


BEGIN  


DECLARE userCode VARCHAR(20);


DECLARE cur_user CURSOR FOR SELECT code FROM user;


OPEN cur_user;


out_loop:


LOOP


FETCH cur_user INTO userCode;;


CALL  deleteMenu(menuCode,userCode);


END LOOP out_loop;


CLOSE cur_user;


END $$  


DELIMITER ;


 


利用游标循环的实现很简洁,却出现了一个奇葩的问题(第一次遇见mysql报错却能执行出想要的结果)。使用上述存储过程删除数据时,数据可以按照预期的删除,但mysql却报了如下错误:




No data - zero rows fetched, selected, or processed


 


搜索了下才知道,是因为FETCH没有跳出循环导致的。重新编写存储过程如下,顺利解决问题。


 


DROP PROCEDURE IF EXISTS delete_Menu;  


DELIMITER $$ 


CREATE PROCEDURE delete_Menu( IN menuCode VARCHAR(200))


BEGIN  


DECLARE done INT DEFAULT 0; 


DECLARE userCode VARCHAR(20);


DECLARE cur_user CURSOR FOR SELECT code FROM user; 


DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;


OPEN cur_user;


out_loop:


LOOP


FETCH cur_user INTO userCode;


IF done =1 THEN


LEAVE out_loop;


END IF;


CALL  deleteMenu(menuCode,userCode);


SET done = 0;


END LOOP out_loop;


CLOSE cur_user;


END $$  


DELIMITER ;


 


本文永久更新地址:http://www.linuxdiyf.com/linux/28620.html

相关资讯