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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 09:09:02