DML觸發器觸發順序

2021-07-26 23:13:41 字數 1712 閱讀 3376

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;

臨時表記錄如下:

DDL觸發器與DML觸發器比較

dml觸發器 要防止對資料庫架構進行某些更改。希望資料庫中發生某種情況以響應資料庫架構中的更改。要記錄資料庫架構中的更改或事件。僅在執行觸發 ddl 觸發器的 ddl 語句後,ddl 觸發器才會激發。ddl 觸發器無法作為 instead of 觸發器使用。下面的示例顯示如何使用 ddl 觸發器阻止...

DML觸發器的缺憾

tom說過他希望三樣東西不曾存在 觸發器,自治事務,when others 級聯刪除 級聯修改,在設計良好的系統中是不存在的 即使有,那也是小概率事件,必須專門寫一段指令碼來解決,而不是作為常規功能存在 不得不用觸發器,要麼是原系統模組化做得不夠好,要麼是不允許改動原有的 當然有時候不是不允許,而是...

ebs form 觸發器順序

觸發器執行順序 1 當開啟form時 1 pre form 2 pre block block級 3 when new form instance 4 when new block instance 5 when new record instance 6 when new item instanc...