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 触发器,则不保证触发器的执行顺序。
CREATE TABLE taba (a int, b int, c int, d int);
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 taba SET (b, c) = (b + 1, c + 1);
然后列 a 和 c 的 trig1 首先执行,列 b 和 d 的 trig2 随后执行。在此情况中,触发器中列编号最小的是第 1 列(a),第二小的是第 2 列(b)。