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

MySQL存储过程中通过表达式设置INT变量为何返回NULL?

问题分析:MySQL存储过程返回NULL但数据库存在对应数据

原代码

DELIMITER $$
CREATE PROCEDURE all(bagName Varchar(50), bagType Varchar(50))
BEGIN
DECLARE valId INT;

SET valId = (
select c.bid from catalog c where (c.name = @bagName AND c.abbr = @bagType)
);
select valId;
END $$

call all("Kickers", "Kr");

问题原因

  • 存储过程内部错误使用了会话变量@bagName和@bagType,而非定义的存储过程参数bagName和bagType。
  • 未赋值的会话变量默认值为NULL,导致WHERE条件无法匹配到数据库中已存在的数据,最终valId返回NULL。

修正后的代码

DELIMITER $$
CREATE PROCEDURE get_bag_id(bagName Varchar(50), bagType Varchar(50))
BEGIN
DECLARE valId INT;

SET valId = (
select c.bid from catalog c where (c.name = bagName AND c.abbr = bagType)
);
select valId;
END $$

call get_bag_id("Kickers", "Kr");

额外提示:all是MySQL的关键字,作为存储过程名称可能引发语法冲突,建议改用get_bag_id这类非关键字命名。

内容的提问来源于stack exchange,提问作者Apurva Khatri

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 17:01:20