【发布时间】:2012-06-29 19:31:08
【问题描述】:
如果我在 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。
这对我来说是个大问题,因为这个错误我无法输出递归存储过程的结果。
【问题讨论】:
-
您可能应该显示调用该过程的语句。
-
我认为问题不在于 SP,而是来自调用 SP 的
BEFORE触发器。 -
我同意问题一定出在调用 SP 的 BEFORE 触发器上。当我通过 Navicat 运行 SP 时发生此错误。但是当我从另一个 SP 调用 SP 时,我没有收到错误消息。结论:Navicat 的运行按钮调用 SP 的方式不适用于 OUT 和 INOUT 参数。
标签: mysql stored-procedures arguments out