You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:23:26