簡體   English   中英

如何在if語句中調用存儲過程?

[英]How to call a stored procedure in an if statement?

我在MySQL中有一個SP,它在其中一個行中調用if語句中的另一個SP,如下所示:

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

SP_CheckExist retuern true或false。 但我的語法錯誤!

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));

為什么?

您必須創建一個函數來檢查數據的存在,或者您必須在過程中使用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

第二個SP

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM