2010-09-05 2 views
9

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

+0

Я все еще не был уверен, что вы искали с точки зрения простоты, поэтому я удалил свой ответ. У кого-то еще может быть хорошая идея. –

+0

За каждое небольшое сомнение я отправляю вопрос в переполнение стека, не думая .....(думаю, я не должен этого делать) .... Я понял концепцию триггеров. Теперь я подумаю, прежде чем публиковать вопрос ... – Jagan

ответ

22

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

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

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

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

+1

+1 Я бы просто добавил, что некоторые триггерные проверки должны выполняться в строке AFTER триггеров, потому что только триггеры AFTER имеют значение «fixed». В триггере BEFORE вы можете проверить и передать некоторое сложное правило на основе значения: NEW.col только для значения: NEW.col, которое будет изменено позже в триггере, так что правило теперь нарушено. –

6

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

Перед Триггеры

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

После Триггеры

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

перед срабатыванием используется, когда действие спускового механизма должно определить, действительно ли запускающие заявления должны быть разрешено завершить .by с использованием ДО Триггера пользователя может устранить ненужную обработку триггера , но, после того TRIGGERS используется, когда запускающее заявление должен завершиться до запуска действия триггера.

+0

Измените существующий ответ, а не дублируйте другой. – wonea

Смежные вопросы