When a trigger is activated, it runs according to its granularity as follows:
If the set of affected rows is empty (that is, in the case of a searched UPDATE or DELETE in which the WHERE clause did not qualify any rows), a FOR EACH ROW trigger does not run. But a FOR EACH STATEMENT trigger still runs once.
For example, keeping a count of number of employees can be done using FOR EACH ROW.
CREATE TRIGGER NEW_HIRED AFTER INSERT ON EMPLOYEE FOR EACH ROW MODE DB2SQL UPDATE COMPANY_STATS SET NBEMP = NBEMP + 1
You can achieve the same affect with one update by using a granularity of FOR EACH STATEMENT.
CREATE TRIGGER NEW_HIRED AFTER INSERT ON EMPLOYEE REFERENCING NEW_TABLE AS NEWEMPS FOR EACH STATEMENT MODE DB2SQL UPDATE COMPANY_STATS SET NBEMP = NBEMP + (SELECT COUNT(*) FROM NEWEMPS)
Note: | A granularity of FOR EACH STATEMENT is not supported for BEFORE triggers (discussed in Trigger Activation Time). |