3

MySQL に SP があり、その行の 1 つで、次のような if ステートメントで別の SP を呼び出します。

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

SP_CheckExisttrue または 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));

なんで?

4

1 に答える 1

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

2回目のSP

DECLARE _result BOOL DEFAULT FALSE;
CALL SP_CheckExist(id1,id2,_result);
if(_result) then 
   /* Your Code Snippet*/
else
   /* Your Code Snippet*/
end if;
于 2012-12-19T08:57:54.600 に答える