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
相关产品推荐
相关产品推荐

