如果我使用OUT或INOUT参数在MySQL中创建存储过程,则它不起作用。即使我将存储过程留空。 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不是a BEFORE触发器中的变量或NEW伪变量。
即使在存储过程中写入代码,此错误仍会存在。我正在运行mysql版本5.1.41。
这对我来说是一个大问题,因为我无法输出递归存储过程的结果,因为这个错误。
答案 0 :(得分:4)
它对我有用
mysql> CREATE DEFINER=`root`@`localhost` PROCEDURE `testing_inout`(`a` int,INOUT `b` int)
-> BEGIN
->
-> END
-> ;
Query OK, 0 rows affected (0.00 sec)
第二个参数,因为它必须是一个变量:
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)