MySQL 8.0存储过程OUT参数返回NULL异常问题排查求助
问题根因
你混淆了MySQL两种变量的用法:
- 存储过程头中声明的
IN val1 INT、IN val2 INT、OUT val3 INT都是存储过程局部变量,引用时直接写变量名即可,不需要加@前缀 - 带
@前缀的是会话级用户变量,和存储过程局部参数完全独立,你代码中用到的@val1、@val2从未赋值,默认值为NULL,NULL参与的算术运算结果始终为NULL,所以最终OUT参数返回NULL
你之前尝试的两个方案都没有命中核心问题:修改@myvar222初始值、给val3加@前缀都无法解决入参读取错误的问题。
修正后的代码
DROP PROCEDURE IF EXISTS cbtgeo.add123; DELIMITER // CREATE PROCEDURE cbtgeo.add123 (IN val1 INT, IN val2 INT, OUT val3 INT) BEGIN -- 去掉@前缀,直接引用存储过程的入参 SET val3 = val1 + val2; END// DELIMITER ; SET @myvar222 = NULL; CALL cbtgeo.add123(5,6, @myvar222); SELECT @myvar222;
执行结果
运行修正后的代码即可得到预期的11:
+-----------+ | @myvar222 | +-----------+ | 11 | +-----------+ 1 row in set (0.00 sec)
内容的提问来源于stack exchange,提问作者user189198
相关产品推荐
相关产品推荐

