Это правильный способ установить значение переменной в триггере mysql? - PullRequest
0 голосов
/ 18 июня 2020

Итак, у меня есть эта переменная configId, и я установил для нее значение 1, но результат отличается от

DROP TRIGGER IF EXISTS input_verification;
DELIMITER $$
CREATE TRIGGER input_verification 
AFTER INSERT ON InputHistory FOR EACH ROW
BEGIN
    DECLARE configId integer;
    SET @configId := 1;
        IF( SELECT count(*)FROM InputHistory JOIN Input on InputHistory.inputId = Input.inputId WHERE InputHistory.inputHistoryOrderNumber=Input.inputOrderNumber AND InputHistory.inputHistoryStatus >= 300)=0 THEN
    UPDATE Configuration SET configurationReady = true WHERE configurationId= configId;
    END IF;
END $$ 
DELIMITER ;

это:

DROP TRIGGER IF EXISTS input_verification;
DELIMITER $$
CREATE TRIGGER input_verification 
AFTER INSERT ON InputHistory FOR EACH ROW
BEGIN
    DECLARE configId integer;
    SET @configId := 1;
        IF( SELECT count(*)FROM InputHistory JOIN Input on InputHistory.inputId = Input.inputId WHERE InputHistory.inputHistoryOrderNumber=Input.inputOrderNumber AND InputHistory.inputHistoryStatus >= 300)=0 THEN
    UPDATE Configuration SET configurationReady = true WHERE configurationId= 1;
    END IF;
END $$ 
DELIMITER ;

Где я помещаю значение 1 в заявление об обновлении.

1 Ответ

0 голосов
/ 18 июня 2020

Не помещайте сигил @ в локальные переменные, которые вы объявили в теле вашего триггера.

В MySQL переменные с @ сигилом являются пользовательскими переменными . Вам не нужно это объявлять. Но у них есть возможности за пределами вашего триггера. Если они имеют значение до выполнения вашего триггера, триггер может прочитать это значение. Если вы измените значение такой переменной внутри триггера, значение будет сохранено после срабатывания триггера.

В то время как переменные без символа @ являются локальными переменными. Вы должны использовать DECLARE для создания этих переменных, как вы это делали выше. Они ограничены областью тела, в котором они объявлены, т.е. в этом случае переменная видна только внутри этого триггера.

Не смешивайте их. Просто представьте configId и @configId как разные переменные. На самом деле это разные переменные. Установка одного не меняет значения другого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...