Database triggers are
PL/SQL, Java, or C procedures that run implicitly whenever a table or view is
modified or when some user actions or database system actions occur. Database
triggers can be used in a variety of ways for managing your database. For
example, they can automate data generation, audit data modifications, enforce complex
integrity constraints, and customize
complex security authorizations.
Row Triggers
A row trigger is fired each time the table is affected by the
triggering statement.
For example, if an UPDATE
statement updates multiple rows of a table, a row trigger is fired once for
each row affected by the UPDATE statement.
If a triggering statement affects no rows, a row trigger is not
executed at all.
Row triggers are useful if the code in the trigger action depends on
data provided by the triggering statement or rows that are affected.
Statement Triggers
A statement trigger is fired once on behalf of the triggering
statement, regardless of the number of rows in the table that the triggering
statement affects (even if no rows are affected).
For example, if a DELETE
statement deletes several rows from a table, a statement-level DELETE trigger
is fired only once, regardless of how many rows are deleted from the table.
Statement triggers are useful if the code in the trigger action does
not depend on the data provided by the triggering statement or the rows
affected.
For example, if
a trigger makes a complex security check on the current time or user, or if a
trigger generates a single audit record based on the type of triggering
statement, a statement trigger is used.
BEFORE vs. AFTER Triggers
When defining a trigger, you can specify the trigger timing.
That is, you can specify whether the trigger action is to be
executed before or after the triggering statement.
BEFORE and AFTER apply to both statement and row triggers.
BEFORE Triggers BEFORE triggers execute the trigger action before the triggering
statement. This type of trigger is commonly used in the following situations:
BEFORE triggers are used when the trigger action should determine
whether the triggering statement should be allowed to complete. By using a
BEFORE trigger for this purpose, you can eliminate unnecessary processing of
the triggering statement and its eventual rollback in cases where an exception
is raised in the trigger action.
BEFORE triggers are used to derive specific column values before
completing a triggering INSERT or UPDATE statement.
AFTER Triggers AFTER triggers execute the trigger action after the triggering
statement is executed. AFTER triggers are used in the following situations:
AFTER triggers are used when you want the triggering statement to
complete before executing the trigger action.
If a BEFORE trigger is already present, an AFTER trigger can perform
different actions on the same triggering statement.
Combinations
Using the
options listed in the previous two sections, you can create four types of
triggers:
BEFORE statement trigger Before executing the triggering statement, the trigger action is
executed.
BEFORE row trigger Before modifying each row affected by the triggering statement and
before checking appropriate integrity constraints, the trigger action is
executed provided that the trigger restriction was not violated.
AFTER statement trigger After executing the triggering statement and applying any deferred
integrity constraints, the trigger action is executed.
AFTER row trigger After modifying each row affected by the triggering statement and
possibly applying appropriate integrity constraints, the trigger action is
executed for the current row provided the trigger restriction was not violated.
Unlike BEFORE row triggers, AFTER row triggers lock rows.
New Database Triggers
Startup, Shutdown, Logon, Logoff, Alter, Create, Drop
No comments:
Post a Comment