繁体   English   中英

在MySQL中级联存储过程

[英]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..进行检查。

同样,这可能不是最简单的示例,甚至可能对过程过大(使用函数作为可能的替代方法),并且还有其他方法可以返回要在存储过程中使用的值,这些方法旨在利用一个存储过程的输出在里面。

[编辑]根据评论:

存储过程中的INOUTOUT参数(仅在存储过程中可用,而在函数中不可用)允许存储过程的调用者通过CALL storedprocedurename..命令将用户定义的变量传递给被调用过程的out参数的位置-在其中运行相同的过程并向其传递一个值。 执行被调用过程后,传递到用户定义变量中的out值将变为可用。 在上面的示例中,存储过程setOutputParameterout参数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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM