Хранимый процесс SQL: если оператор не работает должным образом - PullRequest
0 голосов
/ 29 октября 2018

Попытка создать хранимый процесс для 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 голосов
/ 29 октября 2018

@ используется для переменных сеанса . Находясь внутри хранимой процедуры, вам не нужно использовать @ для ввода параметров. В противном случае MySQL будет искать похожее имя предопределенной переменной Session. Так как он не находит его; он принимает свои значения как 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 ;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...