Нет, не существует определенного механизма для передачи аргумента в 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
для запроса значения из таблицы.