2012-09-12 21 views
0

你有2个MySQL存储过程,都在结尾选择返回码。您需要在另一个存储过程中调用1个存储过程,并获取其返回码。这可能吗?MySQL:在另一个存储过程中调用存储过程时获取返回码?

过程Proc1:

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

PROC2:

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?

回答

0

您应该使用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 
+0

的OUT非常有意义,谢谢。我想知道是否有一些鲜为人知的技巧,通过一些全球或某些东西访问它,但这回答了我的问题。 – VDH

相关问题