MySQL 8.0过程输出参数为null



简介

我正在编写一个MySQL存储过程,其中包含两个IN参数和一个OUT参数。OUT参数的值似乎为null。

我在这里做错了什么?

复制步骤


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;

预期结果

+-----------+
| @myvar222 |
+-----------+
|        11 |
+-----------+
1 row in set (0.00 sec)

实际结果

+-----------+
| @myvar222 |
+-----------+
|      NULL |
+-----------+
1 row in set (0.00 sec)

我尝试过的

  • @myvar222初始化为0而不是NULL
  • SET @val3 ...代替SET val3 ...

我终于想通了。

当您在存储过程的主体中引用IN参数时,不使用@符号。

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;

结果

+-----------+
| @myvar222 |
+-----------+
|        11 |
+-----------+
1 row in set (0.00 sec)