разница до и после триггера в оракуле - PullRequest
12 голосов
/ 05 сентября 2010

Может кто-нибудь объяснить разницу между триггером «до» и «после» в Oracle 10g на примере?

Ответы [ 3 ]

30 голосов
/ 06 сентября 2010

Сначала я начну свой ответ с определения trigger : trigger - это хранимая процедура, которая запускается при добавлении, изменении или удалении строки.

Триггеры могут запускаться ДО действие предпринято или ПОСЛЕ действие принято.

BEFORE триггеры обычно используются, когда требуется проверка перед принятиемизменение.Они запускаются до внесения каких-либо изменений в базу данных.Допустим, у вас есть база данных для банка.У вас есть стол accounts и стол transactions.Если пользователь снимает средства со своей учетной записи, вы должны убедиться, что у пользователя достаточно средств на его счету для вывода средств.Триггер BEFORE позволит сделать это и предотвратит вставку строки в transactions, если недостаточно баланса в accounts. Триггеры

AFTER обычно используются, когда требуется информацияобновляется в отдельной таблице из-за изменений.Они запускаются после внесения изменений в базу данных (не обязательно зафиксированных).Давайте вернемся к нашему заднему примеру.После успешной транзакции вы бы хотели обновить balance в таблице accounts.Триггер AFTER позволит вам сделать именно это.

7 голосов
/ 05 сентября 2010

Я не совсем уверен, что вам интересно знать, поэтому я буду придерживаться этого принципа.

Перед триггерами

  • По названию эти триггеры срабатывают до создания строки в таблице. Впоследствии, поскольку строка еще не создана, у вас есть полный доступ к полю: new.table_element. Это обеспечивает очистку и однородность данных, если нежелательные / искаженные данные пытаются вставить / обновить. Это только базовый пример, но вам нужно использовать триггер «перед» в любое время, когда вам может потребоваться доступ к данным «: new».

После срабатывания

  • Поскольку триггер после запуска срабатывает после того, как строка уже создана, эти триггеры обычно используются, когда вы хотите, чтобы логика возникала из-за строки. Например, если у вас есть таблица адресов, а пользователь обновляет свой адрес, то вы можете обновить идентификаторы ссылок на адреса в таблице внешних ссылок при создании (если вам удалось сохранить все старые адреса). Кроме того, в отличие от триггера before, у вас нет доступа для изменения каких-либо значений столбца, поскольку строка уже существует в таблице.
1 голос
/ 10 августа 2011

ПЕРЕД ТРИГГЕРОМ используются, когда действие триггера должно определить, следует ли разрешить выполнение операторов триггера. Используя ПЕРЕД ТРИГГЕРАМИ пользователь может исключить ненужную обработку оператора триггера, но, ПОСЛЕ ТРИГГЕРА, используется, когда операторы триггера должны быть завершеныперед выполнением действия триггера.

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