[英]Cascading stored procedures in MySQL
这个问题相对简单。
有可能在MySQL中调用一个过程,使其进入另一个过程吗?
例:
创建了两个过程:proc1和proc2
在proc1中,我将调用proc2。因此:
BEGIN
IF ( CALL ConsultConsoleAvailableTime(`StartTime`, `PlusTime` ) IS NULL ) THEN
SELECT 'error';
END IF;
END;
可能吗? 怎么样? 没有在这里没有工作。 :D
编辑1:
1318-PROCEDURE sistemajogosxbox.ConsultConsoleAvailableTime的参数数目不正确; 预期3,得到2
编辑2:
1172-结果包含多于一行
现在?
只是为了说明在另一种方法中使用存储过程的一种方式:
DELIMITER //
CREATE PROCEDURE setOutputParameter (
OUT OutputParameter VARCHAR(20)
)
BEGIN
SELECT 'output' INTO OutputParameter;
END//
DELIMITER ;
DELIMITER //
CREATE PROCEDURE useOutputParameter ()
BEGIN
CALL setOutputParameter(@tmpOutputParameter);
IF @tmpOutputParameter = 'output'
THEN SELECT 'string: output was returned' AS res;
END IF;
END//
DELIMITER ;
过程setOutputParameter
将一个值设置为其out
参数,然后为过程setOutputParameter
(和变量: @tmpOutputParameter
)创建一个占位符,然后在IF..THEN..
语句中IF..THEN..
进行检查。
同样,这可能不是最简单的示例,甚至可能对过程过大(使用函数作为可能的替代方法),并且还有其他方法可以返回要在存储过程中使用的值,这些方法旨在利用一个存储过程的输出在里面。
[编辑]根据评论:
存储过程中的INOUT
或OUT
参数(仅在存储过程中可用,而在函数中不可用)允许存储过程的调用者通过CALL storedprocedurename..
命令将用户定义的变量传递给被调用过程的out
参数的位置-在其中运行相同的过程并向其传递一个值。 执行被调用过程后,传递到用户定义变量中的out
值将变为可用。 在上面的示例中,存储过程setOutputParameter
的out
参数OutputParameter
将需要在调用时将变量传递给它,因为存储过程setOutputParameter
将为其传递值。 所以,实际上,一旦代码内存储过程useOutputParameter
如果通过调用CALL setOutputParameter(@tmpOutputParameter);
,传递给它作为out参数的变量: @tmpOutputParameter
现在将包含字符串值output
,过程useOutputParameter
的其余代码可以使用...
在此处阅读更多信息: http : //dev.mysql.com/doc/refman/5.0/en/create-procedure.html
您可以从另一个调用一个存储过程。 我以前做过
我认为您的示例很狡猾,因为proc2()
没有像函数那样的返回值。 也许您需要使proc2()
成为函数而不是过程。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.