sql存储进程:if语句的行为不符合预期

kkih6yb8  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(340)

正在尝试为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语句写得不正确吗?

juud5qan

juud5qan1#

@ 用于会话变量。在存储过程中,不需要使用 @ 对于输入参数。否则,mysql将寻找一个类似名称的预定义会话变量。因为它找不到它;它假定其值为 Null 还有其他错误。你有一个拼写错误;而不是使用 outErrorCode param,您正在使用另一个未定义的变量 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 ;

相关问题