2012-12-19 32 views
3

我有SP在MySQL,在其行的一個調用另一個SP if語句象下面這樣:如何在if語句中調用存儲過程?

IF ((CALL SP_CheckExist(id1,id2)) THEN //some thing ; END IF; 

SP_CheckExist retuern真或假。但是我的語法錯誤!

SP_CheckExist是這樣的:

BEGIN 
    IF EXISTS(SELECT 1 FROM tbl1 WHERE Id1 = p_Id1 AND Id2 = p_Id2 LIMIT 1) 
    THEN SELECT TRUE; 
    ELSE SELECT FALSE; 
    END IF; 
END 

其實即使我不能做一些事情是這樣的:

SET result = (CALL SP_CheckExist(1,1)); 

爲什麼?

+0

我們可以看到SP_CheckExist的代碼嗎? – berty

+0

錯誤消息是相關的。他們不在那裏煩惱。請閱讀它們!無論如何,你是如何編寫一個存儲過程來返回*什麼的?函數返回的東西,程序不。 –

+0

SP_CheckExist應該是一個函數,而不是一個過程。過程不返回值。你可以在程序中使用out參數。 – 2012-12-19 08:50:58

回答

2

要麼你必須創建一個功能檢查數據是否存在等或你必須使用OUT類型參數的程序,使用IF條件變量。

功能

DELIMITER $$ 

DROP FUNCTION IF EXISTS `fn_CheckExist`$$ 

CREATE FUNCTION `fn_CheckExist`(p_id1 INT, p_id2 INT) RETURNS BOOL CHARSET latin1 
    READS SQL DATA 
BEGIN 
    DECLARE _result BOOL DEFAULT FALSE; 
    IF EXISTS(SELECT 1 FROM tbl1 WHERE Id1 = p_Id1 AND Id2 = p_Id2 LIMIT 1) 
     THEN SET _result = TRUE; 
     ELSE SET _result = FALSE; 
    RETURN _result; 
END$$ 

DELIMITER ; 

SP

DECLARE _result BOOL DEFAULT FALSE; 
SELECT fn_CheckExist(id1, id2) INTO _result; 
IF(_result) THEN 
    /* Your Code Snippet*/ 
ELSE 
    /* Your Code Snippet*/ 
END IF; 

,或通過步驟

CREATE PROCEDURE `sp_CheckExist`(IN p_Id1 INT, IN p_Id2 INT, OUT _result BOOL) 
BEGIN 
    IF EXISTS(SELECT 1 FROM tbl1 WHERE Id1 = p_Id1 AND Id2 = p_Id2 LIMIT 1) 
    THEN SET _result = TRUE; 
    ELSE SET _result = FALSE; 
    END IF; 
END 

2nd SP

DECLARE _result BOOL DEFAULT FALSE; 
CALL SP_CheckExist(id1,id2,_result); 
if(_result) then 
    /* Your Code Snippet*/ 
else 
    /* Your Code Snippet*/ 
end if;