错误1329(02000):无数据 - 提取,选择或处理零行

时间:2017-11-05 08:28:54

标签: mysql sql

我在下面的代码中收到错误。错误是#1329 - 无数据 - 提取,选择或处理零行。这究竟是什么意思,我做错了什么?感谢

create or replace procedure grade()
begin
declare no,s1,s2,s3,cnt,i,per int(20);
declare c1 cursor for select roll,sub1,sub2,sub3 from student;
set i=0;
select count(*) into cnt from student;
open c1;
while i<=cnt do
fetch c1 into no,s1,s2,s3;
set per=s1+s2+s3/3;
if per>=90 then
update student set grade='A+' where roll=no; 
elseif (per<90 and per>=80)then
update student set grade='A' where roll=no; 
elseif (per<80 and per>=70)then
update student set grade='B+' where roll=no; 
elseif (per<70 and per>=60)then
update student set grade='B' where roll=no; 
elseif (per<60 and per>=50)then
update student set grade='C+' where roll=no; 
elseif (per<50 and per>=40)then
update student set grade='C' where roll=no; 
else 
update student set grade='FAIL' where roll=no; 
end if;
set i=i+1;
end while;
close c1; 
end$$

1 个答案:

答案 0 :(得分:0)

这个逻辑:

set i = 0;
select count(*) into cnt from student;
while i <= cnt do

正在循环1次额外的时间。通过循环的最后一次旅程,你得到了错误。

例如,如果cnt为3,则循环为:

0
1
2
3

你要么:

set i = 1

或者

while i < cnt

在SQL中,我会使用第一种方法,因为事情通常在SQL中从1开始计数而不是0 - 但它们是等价的。