刚好一个案例需要在写存储过程,但是总是报错no data - zero rows fetched, selected, or processed
存错过程代码如下
delimiter $$
drop procedure if exists `jbpm`.`refreshroster` $$
create definer=`root`@`%` procedure `refreshroster`(in hostname varchar(30))
begin
declare uname varchar(30);
declare cur1 cursor for select username from ofuser;
delete from ofroster;
open cur1;
read_loop: loop
fetch cur1 into uname;
update temp set text_='1';
......
end loop;
close cur1;
end $$
delimiter ;
修改后
delimiter $$
drop procedure if exists `jbpm`.`refreshroster` $$
create definer=`root`@`%` procedure `refreshroster`(in hostname varchar(30))
begin
declare i int;
declare tc int;
declare flag int;
declare uname varchar(30);
declare cur1 cursor for select username from ofuser;
declare continue handler for sqlstate '02000' set flag = 3;
select count(*) into tc from ofuser;
delete from ofroster;
set i=0;
open cur1;
read_loop: loop
fetch cur1 into uname;
update temp set text_='1';
if i > tc then
leave read_loop;
else
.......
end if;
set i=i+1;
end loop;
close cur1;
end $$
delimiter ;
增加了红色语句部分,我创建一个表temp,仅一个字段,然后每次循环时更新一下,这样就不会报错。其中使用了i和tc,因为我发现单纯使用fetch,并不会退出循环,可能是死循环。