我在 MySQL 中有一个 SP,它的一行在 if 语句中调用另一个 SP,如下所示:
IF ((CALL SP_CheckExist(id1,id2)) THEN //some thing ; END IF;
SP_CheckExist
返回真或假。但是我的语法有误!
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;
关于mysql - 如何在if语句中调用存储过程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13948482/