1

如果我在 MySQL 中使用 OUT 或 INOUT 参数创建存储过程,则它不起作用。即使我将存储过程留空。DDL 如下:

CREATE DEFINER=`root`@`localhost` PROCEDURE `testing_inout`(`a` int,INOUT `b` int)
BEGIN

END

第一个参数是常规 IN 参数。第二个是 INOUT 参数(即使设置为 OUT,同样的问题仍然存在)

当我调用此存储过程时,我收到一条错误消息:

例程 db_name.testing_inout 的 OUT 或 INOUT 参数 2 不是 BEFORE 触发器中的变量或 NEW 伪变量。

即使在存储过程中编写代码,此错误仍然存​​在。我正在运行 mysql 版本 5.1.41。

这对我来说是个大问题,因为由于这个错误,我无法输出递归存储过程的结果。

4

1 回答 1

4

这个对我有用

mysql> CREATE DEFINER=`root`@`localhost` PROCEDURE `testing_inout`(`a` int,INOUT `b` int)
    -> BEGIN
    -> 
    -> END
    -> ;
Query OK, 0 rows affected (0.00 sec)

第二个参数因为它是 inout 它需要是一个变量:

mysql> set @c:=1;
Query OK, 0 rows affected (0.00 sec)

mysql> call testing_inout(1,@c);
Query OK, 0 rows affected (0.00 sec)

如果您尝试这样做,它将返回 1:

delimiter |
CREATE DEFINER=`root`@`localhost` PROCEDURE `testing_inout`(`a` int,INOUT `b` int)
BEGIN
select b;
END
|
delimiter ;

mysql> call testing_inout(1,@c);
+------+
| b    |
+------+
|    1 |
+------+
1 row in set (0.00 sec)

Query OK, 0 rows affected (0.00 sec)
于 2012-06-29T19:51:00.637 回答