Можно ли передать значение при вставке? - PullRequest
0 голосов
/ 09 мая 2018

У меня есть триггер, подобный этому:

IF ( value > new.value ) THEN

    ...

END IF

Будет выполнено AFTER INSERT. Мне нужно передать value (это число) при вставке из-за его использования в состоянии триггера. Любая идея, как я могу передать это?

Отмечено, что в настоящее время оно жестко закодировано в триггер, как IF ( 5 > new.value ) THEN. И все, что я пытаюсь сделать, это передать это 5 динамически при вставке.

1 Ответ

0 голосов
/ 09 мая 2018

Нет, не существует определенного механизма для передачи аргумента в TRIGGER.

Единственное, о чем я могу думать, это пользовательская переменная (но я бы не хотел туда идти) или оператор SELECT для извлечения значения из таблицы.


Мы можем установить пользовательскую переменную в нашем сеансе:

SET @value_for_after_insert_trigger = 5 ;

Затем выполните ВСТАВКУ

INSERT INTO mytable (...) VALUES (...)

при срабатывании триггера AFTER INSERT (для каждой строки) тело триггера может ссылаться на пользовательскую переменную. Например:

   DECLARE ln_value INTEGER;
   SET ln_value = @value_for_after_insert_trigger; 

Тогда мы можем сделать

   IF ( ln_value > NEW.value ) THEN 

Обратите внимание, что мы не гарантируем, что какой-то другой оператор в нашей сессии не изменит нашу пользовательскую переменную. Например, триггер BEFORE INSERT может выполнить такой оператор, как:

  SET @value_for_after_insert_trigger = 42 ;

... перезаписывает значение, которое было ранее сохранено. Триггер AFTER INSERT будет считывать текущее назначенное значение, получая 42, а не 5, которые мы указали ранее. И мы не гарантируем, что триггер AFTER INSERT не будет выполнять какое-либо действие, которое изменяет значение.

  SET @value_for_after_insert_trigger = @value_for_after_insert_trigger + 1;

влияет на выполнение триггера для последующих строк.


Я не защищаю это как дизайн. Я бы не использовал пользовательские переменные, подобные этой.


Другой альтернативой может быть использование оператора SELECT для запроса значения из таблицы.

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