General Syntax of SQL CREATE TRIGGER statement:
CREATE TRIGGER trigger_name
{INSERT ON table_name |
DELETE ON table_name |
UPDATE OF column_name ON table_name}
[REFERENCING NEW AS name OLD AS name]
{FOR EACH ROW | BEFORE | AFTER} (Action List);
(1) Enforcing Referential Integrity Constraint.
Upon deleting a customer record, automatically
delete all orders for that customer from the
orders table.
CREATE TRIGGER del_cust
DELETE ON customers
REFERENCING OLD AS pre_del
FOR EACH ROW (DELETE FROM orders WHERE cid = pre_del.cid);
(2) Creating an Audit Trail.
Each time someone updates the quantity of a particular
product, make an entry in a log file of this update
along with the name of the person doing the update and
the date of update.
CREATE TABLE log (
pid varchar(3),
username char(8),
update_date date,
old_qty integer,
new_qty integer);
CREATE TRIGGER upd_prod
UPDATE OF quantity ON products
REFERENCING OLD AS pre_upd NEW AS post_upd
FOR EACH ROW (INSERT INTO log
values (pre_upd.pid,USER,CURRENT,
pre_upd.quantity,post_upd.quantity));
(3) Implementing Business Rules:
Rule: NO single update SHALL increase the total
quantity of all products in stock by 50% or more.
CREATE PROCEDURE upd_prod_1()
DEFINE GLOBAL old_qty INT DEFAULT 0;
LET old_qty = (SELECT SUM(quantity) FROM products);
END PROCEDURE;
CREATE PROCEDURE upd_prod_2()
DEFINE GLOBAL old_qty INT DEFAULT 0;
DEFINE new_qty INT;
LET new_qty = (SELECT SUM(quantity) FROM products);
IF new_qty > 1.5 * old_qty THEN
RAISE EXCEPTION -746, 0, "Update Not Allowed";
ENDIF
END PROCEDURE
CREATE TRIGGER upd_prod
UPDATE OF quantity ON products
BEFORE(EXECUTE PROCEDURE upd_prod_1())
AFTER(EXECUTE PROCEDURE upd_prod_2());
Note: If a trigger fails, INFORMIX automatically rollbacks all
changes.