为何MySQL存储过程返回NULL?表含匹配数据仍无结果
解决MySQL存储过程返回NULL的问题
嘿,我一眼就发现问题所在啦!你的存储过程里犯了一个典型的变量混淆错误,咱们来一步步修复:
问题根源
你定义的存储过程参数是局部变量val,但在SELECT语句的WHERE条件里,你错误地使用了会话变量@val——这两个变量完全不是一回事!因为@val没有被赋值,所以你的查询条件实际上是Country.CName LIKE CONCAT('%', NULL, '%'),结果必然是NULL。
修正后的存储过程代码
把@val替换成参数val即可:
DELIMITER \\ create procedure getCountry(in val varchar(20), out ctry varchar(20)) begin select Country.CName into ctry from test.Country where Country.CName like CONCAT('%', val, '%'); end \\ DELIMITER ;
验证调用
现在再执行你的调用语句:
call getCountry('aus',@ctr); select @ctr;
这时候@ctr就会正确返回Australia啦,传入'Ind'也会返回India。
另外补充一点:如果你的Country表中存在多个匹配的记录,SELECT ... INTO会报错,因为它只能返回单行结果。如果需要处理多行场景,可以考虑使用游标或者修改存储逻辑哦。
内容的提问来源于stack exchange,提问作者vinay nischal
相关产品推荐
相关产品推荐

