【问题标题】:MySQL: Getting a return code when calling a stored procedure within another stored procedure?MySQL:在另一个存储过程中调用存储过程时获取返回码?
【发布时间】:2012-09-12 16:52:33
【问题描述】:

您有 2 个 MySQL 存储过程,它们都在最后选择返回码。您需要在另一个中调用 1 个存储过程,并获取其返回码。这可能吗?

Proc1:

CREATE PROCEDURE (IN...)
BEGIN
DECLARE ret_code
...UPDATE SOMETHING....
SELECT ret_code as return_code from dual;
END

过程2:

CREATE PROCEDURE (IN...)
BEGIN
DECLARE returnVal
if(conditional true)
    ..Update something else..
    Set returnVal = x;
else
    call proc1(var1,...)
    Set returnVal = (ret_code obtained from proc1)
end if
select returnVal;
END

在 proc2 中调用 proc1 时,如何获取在 proc2 中 proc1 末尾选择的 ret_code?​​p>

【问题讨论】:

    标签: mysql sql stored-procedures


    【解决方案1】:

    您应该使用CREATE FUNCTION 而不是CREATE PROCEDURE

    CREATE FUNCTION (...) RETURNS ...datatype...
    BEGIN
    DECLARE ret_code
    ...UPDATE SOMETHING....
    RETURN ret_code;
    END
    
    CREATE FUNCTION (...) RETURNS ...datatype...
    BEGIN
    DECLARE returnVal
    if(conditional true)
        ..Update something else..
        Set returnVal = x;
    else
        Set returnVal = proc1(var1,...)
    end if
    RETURN returnVal;
    END
    

    或者为过程指定一个OUT参数,并使用它:

    CREATE PROCEDURE (OUT ret_code ...datatype..., IN...)
    BEGIN
    ...UPDATE SOMETHING....
    Set ret_code = return_code;
    END
    
    CREATE PROCEDURE (OUT returnVal ...datatype..., IN...)
    BEGIN
    if(conditional true)
        ..Update something else..
        SET returnVal = x;
    else
        call proc1(returnVal, var1,...)
    end if
    END
    

    【讨论】:

    • OUT 完全有道理,谢谢。我想知道是否有一些鲜为人知的技巧可以通过某种全局或其他方式访问它,但这回答了我的问题。
    猜你喜欢
    • 2011-05-05
    • 1970-01-01
    • 1970-01-01
    • 2017-12-06
    • 2017-06-19
    • 2014-09-17
    • 2011-04-26
    相关资源
    最近更新 更多