为什么这个 mysql 存储过程输出的 Num 永远都是 0 ?

简单从SC表统计Score<60的学生的人数(Sno)。表结构如图。我就是不懂我怎么怎么写Num一直都是0?搞了很久了,哭TAT。(要求必须使用存储过程if和循环来写)
image.png

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();
阅读 2.5k
3 个回答

解决:存储过程声明TempSno变量的时候加上默认值

declare TempSno varchar(30) default '';

这样结果就对了。
问题在于没有默认值时,if(tSno!=TempSno)始终为null,无法进入到if里。


这么简单的SQL为什么要用存储过程,在于老师为了让你们了解游标的使用、存储过程怎么写!

这么简单的逻辑直接sql不就可以了吗?为什么要存储过程?另TempSno int 是整型 与 tSno varchar去比较也不合适,直接定义成同样类型不好吗

select count(*) from tableName where tableName.Score < 60
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏