【问题标题】:SQL Stored Process: If statement not behaving as expectedSQL 存储过程:如果语句未按预期运行
【发布时间】:2019-04-02 16:45:13
【问题描述】:

正在尝试为 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语句是不是写错了?

【问题讨论】:

    标签: mysql sql if-statement stored-procedures


    【解决方案1】:

    @ 用于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 ;
    

    【讨论】:

      猜你喜欢
      • 2021-08-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-16
      • 2014-12-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多