mysql - OUT 或 INOUT 参数不起作用

标签 mysql stored-procedures arguments out

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

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

END

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

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

OUT or INOUT argument 2 for routine db_name.testing_inout is not a variable or NEW pseudo-variable in BEFORE trigger.

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

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

最佳答案

对我有用

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)

关于mysql - OUT 或 INOUT 参数不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11267868/

相关文章:

sql-server - 如果 T-SQL 中存在无法正常工作的过程,则删除并重新创建该过程

sql - 返回 SQL Server 中的最大日期

javascript - 如何使用 React 在提交时使用 props 重定向到新组件

javascript - 在 TypeScript 中将任意函数参数推断为对象或元组类型

php - 仅插入第一行并忽略新条目

mysql - 无法使用 Zencart 访问数据库

c# - Size 属性的大小无效,为 0

java - 在 Java 中传递参数

PHP Laravel - 如何通过名称模板选择 mysql 表名称

带有参数语法错误的MySQL函数