mysql - 如何在if语句中调用存储过程?

标签 mysql stored-procedures if-statement

我在 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/

相关文章:

php - 如果另一个表的值为零,则表不会回显

PHP JSON 计算同一数组中的值

sql - UNION 多个存储过程的结果

sql-server - 从 Sql Server 2008 执行 Oracle 存储过程

php - 空($_POST) === FALSE 不能正常工作

java - 如果元素未显示 Selenium,如何转到 else 条件

python - 使用 raw(...) 进行 SQL 格式化/转义注入(inject)

php - html 表单和 php 从 Mysql 填充

mysql - SQL Server中如何查询相似度百分比?

R-基于引用其他行中的值的条件计算