Creating Triggers v13
The CREATE TRIGGER command defines and names a trigger that will be stored in the database.
Name
CREATE TRIGGER -- define a simple trigger.
Synopsis
CREATE [ OR REPLACE ] TRIGGER <name>
{ BEFORE | AFTER | INSTEAD OF }
{ INSERT | UPDATE | DELETE | TRUNCATE }
[ OR { INSERT | UPDATE | DELETE | TRUNCATE } ] [, ...]
ON <table>
[ REFERENCING { OLD AS <old> | NEW AS <new> } ...]
[ FOR EACH ROW ]
[ WHEN <condition> ]
[ DECLARE
[ PRAGMA AUTONOMOUS_TRANSACTION; ]
<declaration>; [, ...] ]
BEGIN
<statement>; [, ...]
[ EXCEPTION
{ WHEN <exception> [ OR <exception> ] [...] THEN
<statement>; [, ...] } [, ...]
]
ENDName
CREATE TRIGGER -- define a compound trigger.
Synopsis
CREATE [ OR REPLACE ] TRIGGER <name>
FOR { INSERT | UPDATE | DELETE | TRUNCATE }
[ OR { INSERT | UPDATE | DELETE | TRUNCATE } ] [, ...]
ON <table>
[ REFERENCING { OLD AS <old> | NEW AS <new>. } ...]
[ WHEN <condition> ]
COMPOUND TRIGGER
[ <private_declaration>; ] ...
[ <procedure_or_function_definition> ] ...
<compound_trigger_definition>
ENDWhere private_declaration is an identifier of a private variable that can be accessed by any procedure or function. There can be zero, one, or more private variables. private_declaration can be any of the following:
- Variable Declaration
- Record Declaration
- Collection Declaration
REF CURSORand Cursor Variable DeclarationTYPEDefinitions for Records, Collections, andREF CURSORs- Exception
- Object Variable Declaration
Where procedure_or_function_definition :=
procedure_definition | function_definition
Where procedure_definition :=
PROCEDURE proc_name[ argument_list ]
[ options_list ]
{ IS | AS }
procedure_body
END [ proc_name ] ;Where procedure_body :=
[ <declaration>; ] [, ...]
BEGIN
<statement>; [...]
[ EXCEPTION
{ WHEN <exception> [OR <exception>] [...]] THEN <statement>; }
[...]
]Where function_definition :=
FUNCTION func_name [ argument_list ]
RETURN rettype [ DETERMINISTIC ]
[ options_list ]
{ IS | AS }
function_body
END [ func_name ] ;Where function_body :=
[ <declaration>; ] [, ...]
BEGIN
<statement>; [...]
[ EXCEPTION
{ WHEN <exception> [ OR <exception> ] [...] THEN <statement>; }
[...]
]Where compound_trigger_definition is:
{ compound_trigger_event } { IS | AS }
compound_trigger_body
END [ compound_trigger_event ] [ ... ]Where compound_trigger_event:=
[ BEFORE STATEMENT | BEFORE EACH ROW | AFTER EACH ROW | AFTER STATEMENT | INSTEAD OF EACH ROW ]
Where compound_trigger_body:=
[ <declaration>; ] [, ...]
BEGIN
<statement>; [...]
[ EXCEPTION
{ WHEN <exception> [OR <exception>] [...] THEN <statement>; }
[...]
]Description
CREATE TRIGGER defines a new trigger. CREATE OR REPLACE TRIGGER will either create a new trigger, or replace an existing definition.
If you are using the CREATE TRIGGER keywords to create a new trigger, the name of the new trigger must not match any existing trigger defined on the same table. New triggers will be created in the same schema as the table on which the triggering event is defined.
If you are updating the definition of an existing trigger, use the CREATE OR REPLACE TRIGGER keywords.
When you use syntax compatible with Oracle databases to create a trigger, the trigger runs as a SECURITY DEFINER function.
Parameters
name
The name of the trigger to create.
BEFORE | AFTER
Determines whether the trigger is fired before or after the triggering event.
INSTEAD OF
INSTEAD OF trigger modifies an updatable view; the trigger will execute to update the underlying table(s) appropriately. The INSTEAD OF trigger is executed for each row of the view that is updated or modified.
INSERT | UPDATE | DELETE | TRUNCATE
Defines the triggering event.
table
The name of the table or view on which the triggering event occurs.
condition
condition is a Boolean expression that determines if the trigger will actually be executed; if condition evaluates to TRUE, the trigger will fire.
If the simple trigger definition includes the
FOR EACH ROWkeywords, theWHENclause can refer to columns of the old and/or new row values by writingOLD.column_nameorNEW.column_namerespectively.INSERTtriggers cannot refer toOLDandDELETEtriggers cannot refer toNEW.If the compound trigger definition includes a statement-level trigger having a
WHENclause, then the trigger is executed without evaluating the expression in theWHENclause. Similarly, if a compound trigger definition includes a row-level trigger having aWHENclause, then the trigger is executed if the expression evaluates toTRUE.If the trigger includes the
INSTEAD OFkeywords, it may not include aWHENclause. AWHENclause cannot contain subqueries.
REFERENCING { OLD AS old | NEW AS new } ...
REFERENCING clause to reference old rows and new rows, but restricted in that old may only be replaced by an identifier named old or any equivalent that is saved in all lowercase (for example, REFERENCING OLD AS old, REFERENCING OLD AS OLD, or REFERENCING OLD AS "old"). Also, new may only be replaced by an identifier named new or any equivalent that is saved in all lowercase (for example, REFERENCING NEW AS new, REFERENCING NEW AS NEW, or REFERENCING NEW AS "new").
Either one, or both phrases OLD AS old and NEW AS new may be specified in the REFERENCING clause (for example, REFERENCING NEW AS New OLD AS Old). This clause is not compatible with Oracle databases in that identifiers other than old or new may not be used.
FOR EACH ROW
Determines whether the trigger should be fired once for every row affected by the triggering event, or just once per SQL statement. If specified, the trigger is fired once for every affected row (row-level trigger), otherwise the trigger is a statement-level trigger.
PRAGMA AUTONOMOUS_TRANSACTION
PRAGMA AUTONOMOUS_TRANSACTION is the directive that sets the trigger as an autonomous transaction.
declaration
A variable, type, REF CURSOR, or subprogram declaration. If subprogram declarations are included, they must be declared after all other variable, type, and REF CURSOR declarations.
statement
An SPL program statement. Note that a DECLARE - BEGIN - END block is considered an SPL statement unto itself. Thus, the trigger body may contain nested blocks.
exception
An exception condition name such as NO_DATA_FOUND, OTHERS, etc.