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觸發器,系統事件觸...