SQL存储过程:If语句的行为不符合预期

时间:2018-10-29 17:26:44

标签: mysql sql if-statement stored-procedures

尝试为MySQL创建存储过程。它包含一个基本的if语句。当前脚本如下:

DROP PROCEDURE IF EXISTS sp_pay_raise;

DELIMITER @@
CREATE PROCEDURE sp_pay_raise
     (IN inEmpId INT,
      IN inPercentageRaise DOUBLE(4,2),
      OUT outErrorCode INT)
BEGIN
    IF (@inPercentageRaise <= 0.0) THEN
        SELECT -3 INTO errorCode
    ELSE
        SELECT -2 INTO errorCode
    END IF;
END @@
DELIMITER ;

以上内容无法正常工作。如果我提供的inPercentageRaise小于零,例如。

CALL sp_pay_raise(0,-1.0, @out)
SELECT @out;

数据库显示@out = -2。是if语句写得不正确吗?

1 个答案:

答案 0 :(得分:2)

@用于Session variables。在存储过程中,您不需要为输入参数使用@。否则,MySQL将寻找类似名称的预定义Session变量。由于找不到它;它假定其值为Null

还有其他错误。你有错字;而不是使用outErrorCode参数,而是使用了另一个未定义的变量errorCode

DROP PROCEDURE IF EXISTS sp_pay_raise;

DELIMITER @@
CREATE PROCEDURE sp_pay_raise
     (IN inEmpId INT,
      IN inPercentageRaise DOUBLE(4,2),
      OUT outErrorCode INT)
BEGIN
    IF (inPercentageRaise <= 0.0) THEN  -- Remove @ from here.
        SELECT -3 INTO outErrorCode  -- It should be outErrorCode instead of errorCode
    ELSE
        SELECT -2 INTO outErrorCode  -- It should be outErrorCode instead of errorCode
    END IF;
END @@
DELIMITER ;