【问题标题】:Cascading stored procedures in MySQLMySQL中的级联存储过程
【发布时间】:2012-03-14 08:56:55
【问题描述】:

问题比较简单。

是否可以将 MySQL 中的一个过程调用到另一个过程中?

例子:

创建了两个过程:proc1 和 proc2

在 proc1 中,我调用 proc 2。 因此:

BEGIN

IF ( CALL ConsultConsoleAvailableTime(`StartTime`, `PlusTime` ) IS NULL ) THEN
    SELECT 'error';
END IF;

END;

有可能吗?如何?没有在这里工作没有。 :D

编辑1:

1318 - PROCEDURE sistemajogosxbox.ConsultConsoleAvailableTime 的参数数量不正确;预期 3,得到 2

编辑2:

1172 - 结果包含不止一行

现在呢?

【问题讨论】:

  • 对于Edit1,您的过程ConsultConsoleAvailableTime 需要三个参数,而您只提供了两个参数:StartTimePlusTime
  • 他们已经很满意了。我不知道为什么这个消息。
  • 我在这里犯了一个小错误。我在修。我相信你是对的,你的回应。
  • 我认为'LIMIT 1'可以解决我的问题。对吗?
  • 很有可能。只获取一行一列,看看会发生什么..

标签: mysql stored-procedures


【解决方案1】:

只是为了说明在另一种方式中使用存储过程的一种方式:

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.. 语句中对其进行检查。

再一次,这可能不是最简单的例子,甚至可能对过程来说是多余的(使用函数作为一种可能的替代方法),还有其他方法可以返回要在旨在利用输出的存储过程中使用的值一个存储过程。

[编辑] 基于帖子评论:

存储过程中的INOUTOUT 参数(仅在存储过程中可用,对函数不可用)允许存储过程的调用者通过CALL storedprocedurename.. 命令将用户定义的变量传递给out参数在被调用过程中的位置——同一个过程在其中运行并向其传递一个值。在被调用的过程执行后,传递给用户定义变量的out 值变得可用。在上面的示例中,存储过程setOutputParameter 中的out 参数OutputParameter 将需要在调用时将变量传递给它,因为存储过程setOutputParameter 将传递一个值给它。因此,实际上,一旦存储过程useOutputParameter 中的代码通过CALL setOutputParameter(@tmpOutputParameter); 调用,它传递的变量充当输出参数:@tmpOutputParameter 现在将包含字符串值output,其余代码在程序useOutputParameter 中可以使用...

在此处阅读更多信息:http://dev.mysql.com/doc/refman/5.0/en/create-procedure.html

【讨论】:

  • MySQL 存储过程中的输出参数是您从存储过程中传递值的参数,然后在相同的存储过程运行后可以访问该参数。在上面的情况下..等等,让我修改我的帖子..
【解决方案2】:

您可以从另一个存储过程调用一个存储过程。我以前做过。

我认为您的示例很狡猾,因为proc2() 没有返回值,就像函数一样。也许您需要将proc2() 设为函数而不是过程。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-23
    • 1970-01-01
    • 2012-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多