ME觸發器簡介

2021-08-29 21:19:57 字數 3166 閱讀 5204

1、觸發器不能顯式的呼叫

觸發器有三部分組成:

(1)觸發器語句(事件),定義啟用觸發器的dml事件和ddl事件

(2)觸發器限制,執行觸發器的條件,該條件必須為真才能啟用觸發器

(3)觸發器操作(主體) ,包含一些sql語句和**,他們在發生觸發器語句且觸發限制的值為真時執行。

create or replace trigger trig_sal

after update of empsal on salary_records ---為salary_records表建立trig_sal觸發器,在更新empsal列時啟用

when (new.empsal>old.empsal)

declare

sul_diff number

begin

sul_diff:=:new.empsal-:old.empsal

dbms_output.put_line(『工資差是:'sal_diff);

end; ---when子句中的條件滿足,將執行being塊中的**。

2、建立觸發器

create or replace trigger aiu_itemfile

after insert on itemfile

for each row

begin

if (:new.qty_hand=0) then

dbms_output.put_line('警告:已插入紀錄,但數量為零');

else

dbms_output.put_line('已插入紀錄');

end if;

end;

3 、觸發器型別

模式(ddl)觸發器-->在模式中執行ddl語句時執行

資料庫級觸發器----> 在發生開啟、關閉、登陸和退出資料庫等系統事件時執行

dml觸發器  --〉  在對錶和檢視執行dml語句時執行

行級觸發器---〉對dml語句修改的每個執行一次

語句級觸發器---〉無論受影響的行數是多少,都只執行一次

instead of觸發器---〉用於使用者不能直接使用dml語句修改的檢視

行級觸發器:

create table test_trg

(id number, name varchar2(20));

create sequence seq_test;

create or replace trigger bi_test_trg

before insert or update of id on test_trg

for each row

begin

if inserting then

select seq_test .nextval into :new.id from dual;

else

end if;

end;

語句級觸發器

create or replace trigger trgdemo

after insert or update or delete on order_master

begin

if updating then

dbms_output.put_line('已更新order_master中的資料');

elsif deleting then

dbms_output.put_line('已刪除oreder_master中的資料');

elsif inserting then

dbms_output.put_line('已在order_master中插入資料');

end if;

end;

3、觸發器的限制

select 語句必須是select into語句或內部游標宣告

不允許ddl宣告或事務控制語句

如果由觸發器呼叫,則儲存子程式不能包括事務控制語句

:old 和:new值得型別不能事long和long raw

4、觸發器 觸發順序

before語句級

before行級

dmlafter行級

after語句級

5、instead of 觸發器

create or replace trigger upd_ord_view

instead of update on ord_view

for each row

begin

update order_master

set vencode=:new.vencode

where orderno=:new.orderno;

dbms_outpu.put_line('已啟用觸發器');

end;

6、模式觸發器

create table dropped_obj(

obj_name varchar2(30),

obj_type  varchar2(20),

drop_type date);

create or replace trigger log_drop_obj

after drop on schema

begin

insert into dropped_obj

values( ora_dict_obj_name,ora_dict_obj_type,sysdate);

end;

7、啟用、禁用和刪除觸發器

alter trigger aju_itemfile disable;

alter trigger aju_itemfile enable;

drop trigger aju_itemfile;

8、檢視有關觸發器的資訊

select trigger_name from user_triggers

where table_name='emp';

select trigger_type,triggering_event,when_clause from user_triggers

where trigger_name='biu_emp_deptno';

觸發器簡介

觸發器 trigger 是個特殊的儲存過程,它的執行不是由程式呼叫,也不是手工啟動,而是由事件來觸發,不能帶引數,比如當對乙個表進行操作 insert,delete,update 時就會啟用它執行。觸發器經常用於加強資料的完整性約束和業務規則等。觸發器可以從 dba triggers user tr...

前觸發器和後觸發器簡介

觸發器是一種特殊的儲存過程。當 insert update 或者delete 語句修改表中乙個或者多個行時執行觸發器。因為 sql server 對特定表上的每乙個指定操作呼叫乙個觸發器,所以可以使用觸發器擴充套件 sql sever 的內建完整性和資料操縱功能.注意 不像delete 語句,tra...

Oracle觸發器簡介 建立 使用觸發器

觸發器類似與儲存過程,都是為了實現特殊功能而執行的 塊。觸發器不允許使用者顯示傳遞引數,不能夠返回引數值,不允許使用者呼叫觸發器。觸發器只是在oracle合適的時間自動呼叫,非常類似於面向程式設計中的 觸發器按照觸發事件型別 物件不同分為 語句觸發器,行觸發器,instead of觸發器,系統事件觸...