为何以下查询中我的Stored Procedure执行后返回NULL值?
问题原因分析
- 核心原因:声明的
sub变量未被正确赋值
你编写的存储过程中,select subject from student where subject=subject_name;语句仅执行了查询操作,没有将查询结果写入提前声明的sub变量中,sub变量始终保持初始化的NULL值,因此if sub="Computer Science"的判断条件永远不成立,输出参数s_scourse不会被赋值,最终返回NULL。 - 潜在问题:未兼容查询结果异常场景
如果传入的subject_name在表中不存在,或者存在多条匹配记录时,直接赋值会触发警告或报错,需要提前做兼容处理。
修正后的存储过程代码
delimiter // create procedure get_students(in subject_name varchar(50),out s_scourse varchar(50)) begin declare sub varchar(50) default null; -- 通过SELECT INTO语法将查询结果赋值给sub变量,加LIMIT 1避免多条匹配记录报错 select subject into sub from student where subject=subject_name limit 1; if sub="Computer Science" then set s_scourse="B.Tech"; -- 可根据需求补充else分支,给其他场景的输出参数赋默认值,避免返回NULL -- else set s_scourse="Other"; end if; end// delimiter ;
调用验证
call get_students("Computer Science",@s_scourse); select @s_scourse;
执行后即可得到预期的B.Tech结果。
内容的提问来源于stack exchange,提问作者Tanmay Chakraborty
相关产品推荐
相关产品推荐

