我在下面的代码中收到错误。错误是#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$$
答案 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 - 但它们是等价的。