简介
我正在编写一个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)