Example of Invoking a Trigger Procedure
The following example defines three tables and a trigger procedure
that references one of these tables in its FOR clause:
CREATE TABLE tab1 (col1 INT,col2 INT); CREATE TABLE tab2 (col1 INT); CREATE TABLE temptab1 (old_col1 INTt, new_col1 INT, old_col2 INT, new_col2 INT); /* The following procedure is invoked from an INSERT trigger in this example. */ CREATE PROCEDURE proc1() REFERENCING OLD AS o NEW AS n FOR tab1; IF (INSERTING) THEN -- INSERTING Boolean operator LET n.col1 = n.col1 + 1; -- You can modify new values. INSERT INTO temptab1 VALUES(0,n.col1,1,n.col2); END IF IF (UPDATING) THEN -- UPDATING Boolean operator -- you can access relevant old and new values. INSERT INTO temptab1 values(o.col1,n.col1,o.col2,n.col2); END IF if (SELECTING) THEN -- SELECTING Boolean operator -- you can access relevant old values. INSERT INTO temptab1 VALUES(o.col1,0,o.col2,0); END IF if (DELETING) THEN -- DELETING Boolean operator DELETE FROM temptab1 WHERE temptab1.col1 = o.col1; END IF END PROCEDURE;This example illustrates that the triggered action can be a different DML operation from the triggering event. Although this procedure inserts a row when an Insert trigger calls it, and deletes a row when a Delete trigger calls it, it also performs INSERT operations if it is called by a Select trigger or by an Update trigger.
The proc1( ) trigger procedure in this example uses Boolean
conditional operators that are valid only in trigger routines. The
INSERTING operator returns true only if the procedure is called from
the FOR EACH ROW action of an INSERT trigger. This procedure can also
be called from other triggers whose trigger event is an UPDATE, SELECT,
or DELETE. statement, because the UPDATING, SELECTING and DELETING
operators return true ( t
) if the procedure is invoked
in the triggered action of the corresponding type of triggering event.
The following statement defines an Insert trigger on tab1 that
calls proc1( ) from the FOR EACH ROW section as its triggered
action, and perform an INSERT operation that activates this trigger:
CREATE TRIGGER ins_trig_tab1 INSERT ON tab1 REFERENCING NEW AS post FOR EACH ROW(EXECUTE PROCEDURE proc1() WITH TRIGGER REFERENCES);Note that the REFERENCING clause of the trigger declares a correlation name for the NEW value that is different from the correlation name that the trigger procedure declared. These names do not need to match, because the correlation name that was declared in the trigger procedure has that procedure as its scope of reference. The following statement activates the ins_trig_tab1 trigger, which executes the proc1( ) procedure.
INSERT INTO tab1 VALUES (111,222);Because the trigger procedure increments the new value of col1 by 1, the value inserted is (112, 222), rather than the value that the triggering event specified.