DML触发器触发时,DML语句的执行顺序:
1、语句之前级触发器
2、行之前级触发器
3、语句本身
4、行之后级触发器
5、语句之后级触发器
例如对表Table_new进行更新,使用临时表记录触发器的激发顺序,如代码所示:
/*语句之前级触发器*/
CREATE OR REPLACE TRIGGER BStatement
BEFORE UPDATE ON Table_new
BEGIN
TrigPackage.v_Counter := 0;
INSERT INTO temp_table
(num_col, char_col)
VALUES
(trig_seq.NEXTVAL,
'Before Statement: counter = ' || TrigPackage.v_Counter);
TrigPackage.v_Counter := TrigPackage.v_Counter + 1;
END BStatement;
/*行之前级触发器*/
CREATE OR REPLACE TRIGGER BRow
BEFORE UPDATE ON Table_new
FOR EACH ROW
BEGIN
INSERT INTO temp_table
(num_col, char_col)
VALUES
(trig_seq.NEXTVAL, 'Before Row: counter = ' || TrigPackage.v_Counter);
TrigPackage.v_Counter := TrigPackage.v_Counter + 1;
END BRow;
/*行之后级触发器*/
CREATE OR REPLACE TRIGGER ARow
AFTER UPDATE ON Table_new
FOR EACH ROW
BEGIN
INSERT INTO temp_table
(num_col, char_col)
VALUES
(trig_seq.NEXTVAL, 'After Row: counter = ' || TrigPackage.v_Counter);
TrigPackage.v_Counter := TrigPackage.v_Counter + 1;
END ARow;
/*语句之后级触发器*/
CREATE OR REPLACE TRIGGER AStatement
AFTER UPDATE ON Table_new
BEGIN
INSERT INTO temp_table
(num_col, char_col)
VALUES
(trig_seq.NEXTVAL,
'After Statement: counter = ' || TrigPackage.v_Counter);
TrigPackage.v_Counter := TrigPackage.v_Counter + 1;
END AStatement;
临时表记录如下: