Ручной запуск триггера в pl/sql

У меня есть таблица A и 4 уровня строки перед триггерами Insert в таблице A. Каков будет порядок срабатывания триггера? Решается ли время выполнения? можем ли мы заказать запуск триггера, например. Триггер 2, затем Триггер 4, затем Триггер 3, затем Триггер 1?


person bhushan23    schedule 25.04.2014    source источник
comment
Ответ FOLLOWS, который предлагает @EatAPeach, — это способ сделать то, что вы буквально просите. Однако с точки зрения архитектуры приложения почти наверняка было бы более целесообразно иметь один триггер уровня строки перед вставкой, который вызывает 4 отдельные процедуры, которые делают то, что в противном случае делали бы эти 4 триггера. Наличие нескольких триггеров одного типа имеет смысл в очень немногих ситуациях.   -  person Justin Cave    schedule 25.04.2014


Ответы (1)


Из документации все триггеры одного и того же type перед выполнением триггеров другого типа. Если в одной таблице есть несколько триггеров одного типа, база данных выбирает произвольный, непредсказуемый порядок.

Если вы хотите, чтобы он выполнялся в определенном порядке, вы должны использовать FOLLOWS.

CREATE OR REPLACE TRIGGER2
BEFORE INSERT
ON TEST_TABLE
FOR EACH ROW

CREATE OR REPLACE TRIGGER4
BEFORE INSERT
ON TEST_TABLE
FOR EACH ROW
FOLLOWS TRIGGER2

CREATE OR REPLACE TRIGGER3
BEFORE INSERT
ON TEST_TABLE
FOR EACH ROW
FOLLOWS TRIGGER4
person Noel    schedule 25.04.2014
comment
Обратите внимание, что FOLLOWS существует только начиная с версии 11.1. До этого не было возможности декларативно принудительно запускать триггеры одного типа в определенном порядке. - person Justin Cave; 25.04.2014