2017-11-05 10 views
0

以下のコードでエラーが発生しています。エラーは、#1329 - データなし - 行がフェッチ、選択、または処理されたことです。これは正確に何を意味し、私は間違って何をしていますか?おかげエラー1329(02000):データがありません - ローがフェッチ、選択、または処理されました

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

ロール、サブ1、サブ2、サブ3、レコード10行の4列 – Abhishek

+0

生徒のテーブル全体をすべてのループで更新していますか?なぜただ一つの更新文を書くのではないのですか?また、elsifsの主要な条件は必要ありません。例えば、> = 90以外のものがあれば、それは既に<90である。これは論理的でないコードのように見える。決して7つの更新ステートメントがあるのはなぜですか?変数にグレードを格納し、ifステートメントの外側に1つのステートメントを置くか、caseステートメントを使用して全体を取り除きます –

答えて

0

このロジック:

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

は、ループ1の余分な時間を通過しています。それはあなたがエラーを取得しているループを最後の旅行になります。

cntが3である場合には、例えば、その後、ループがある:あなたのいずれかが必要

0 
1 
2 
3 

set i = 1 

または代わりにSQLで

while i < cnt 

、私が使用します最初の方法です。なぜなら、物事は通常、SQLでは0ではなく1から数え始めますが、それは同等です。

関連する問題