定义多个 Update 触发器

一个表上的多个 Update 触发器不能包含相同的列。在以下示例中,trig3 items 表上是无效的,因为它的列列表包含 stock_num ,而 stock_numtrig1 中的触发列。
CREATE TRIGGER trig1 UPDATE OF item_num, stock_num ON items
        REFERENCING OLD AS pre NEW AS post
        FOR EACH ROW(EXECUTE PROCEDURE proc1());
        CREATE TRIGGER trig2 UPDATE OF manu_code ON items
        BEFORE(EXECUTE PROCEDURE proc2());
        CREATE TRIGGER trig3 UPDATE OF order_num, stock_num ON items
        BEFORE(EXECUTE PROCEDURE proc3());

当 UPDATE 语句尝试更新具有不同触发器的多个列时,触发列的列编号确定触发执行的顺序。从编号最小的触发列开始执行,且按顺序一直执行到编号最大的触发列。但是,如果在同一列或同一组列上设置了多个 Update 触发器,则不保证触发器的执行顺序。

以下示例显示表 taba 具有四列(a b c d):
CREATE TABLE taba (a int, b int, c int, d int);
trig1 定义为列 a c 上的更新,将 trig2 定义为列 bd 上的更新,如以下示例所示:
CREATE TRIGGER trig1 UPDATE OF a, c ON taba
        AFTER (UPDATE tabb SET y = y + 1);
        
        CREATE TRIGGER trig2 UPDATE OF b, d ON taba
        AFTER (UPDATE tabb SET z = z + 1);
以下示例显示 Update 触发器的触发语句:
UPDATE taba SET (b, c) = (b + 1, c + 1);

然后列 actrig1 首先执行,列 b dtrig2 随后执行。在此情况中,触发器中列编号最小的是第 1 列(a),第二小的是第 2 列(b)。