简单从SC表统计Score<60的学生的人数(Sno)。表结构如图。我就是不懂我怎么怎么写Num一直都是0?搞了很久了,哭TAT。(要求必须使用存储过程if和循环来写)
begin
declare tSno varchar(30);
declare tScore numeric(10,2);
declare TempSno varchar(30);
declare done int default 0;
declare Num int default 0;
declare getStudent cursor for select Sno, Score from SC order by Sno;
declare continue handler for SQLSTATE '02000' set done = 1;
open getStudent;
repeat
fetch getStudent into tSno,tScore;
if(tScore<60) then
if(tSno!=TempSno) then
set Num = Num + 1;
set TempSno = tSno;
end if;
end if;
until done end repeat;
select Num;
close getStudent;
drop table OrderTable;
end //
delimiter ;
call countNum();
解决:存储过程声明
TempSno
变量的时候加上默认值这样结果就对了。
问题在于没有默认值时,if(tSno!=TempSno)始终为null,无法进入到if里。
这么简单的SQL为什么要用存储过程,在于老师为了让你们了解游标的使用、存储过程怎么写!