数据库服务器允许除 Select 触发器外的其它触发器级联,也就是说,一个触发器的触发器操作可以激活另一个触发器。(有关级联 Select 触发器的限制的更多信息,请参阅 Select 触发器被激活时的情况。)
Exceeded limit on maximum number of cascaded triggers.
CREATE TRIGGER del_manu DELETE ON manufact REFERENCING OLD AS pre_del FOR EACH ROW(DELETE FROM stock WHERE manu_code = pre_del.manu_code); CREATE TRIGGER del_stock DELETE ON stock REFERENCING OLD AS pre_del FOR EACH ROW(DELETE FROM items WHERE manu_code = pre_del.manu_code); CREATE TRIGGER del_items DELETE ON items REFERENCING OLD AS pre_del FOR EACH ROW(EXECUTE PROCEDURE log_order(pre_del.order_num));
当您不使用日志记录时,manufact 和 stock 表上的引用完整性约束都阻止该示例中的触发器执行。但是,当您使用日志记录时,触发器成功执行,因为约束检查被延迟,直至所有的触发操作(包括级联触发器的操作)都完成。关于执行触发器时如何处理约束的信息,请参阅约束检查。
除了不修改触发 UPDATE 语句别更新的任何列的 UPDATE 语句或 INSERT 语句外,数据库服务器通过不允许您修改任何级联触发器操作中的触发表俩防止触发器循环。INSERT 触发器可以在同一个表上定义 UPDATE 触发操作。