oracle觸發器

一、五種觸發器:語句觸發器,行觸發器,instead of觸發器,系統事件觸發器,用戶事件觸發器。

1.語句觸發器

create tableemp_copy asselect empno,ename,job,sal from emp;

create tableemp_copy_log(who varchar2(30),when date);

 

create triggerbiufer_emp_copy

before insert orupdate or delete

on emp_copy

begin

  insert into emp_copy_logvalues(user,sysdate);

end;

 /

update emp_copy setsal=sal*2.0;

select *fromemp_copy_log;

2.行觸發器

create tableperson(

personID numberprimary key,

personNamevarchar2(20));

create sequenceperson_seq;

 

create triggerbifer_person_personID_pk

before insert onperson

for each row

begin

  select person_seq.nextval

  into:new.personID from dual;

end;

/

 

insert intoperson(personName) values('Athos');

insert intoperson(personID,personName) values(5678,'Porthos');

insert intoperson(personName) values('Aramis');

select * fromperson;

3.instead of觸發器

create or replaceview emp_job

as

selectempno,ename,job from emp;

 

create triggerupdate_emp_job_view1

 instead of update on emp_job

 begin

   update emp

   set empno=:new.empno,

       ename=:new.ename,

       job=:new.job

   where empno=:old.empno;

 end;

 

4.系統事件觸發器:orcle系統允許開發人員建立與特定系統事件相關的觸發器,特定事件如下:數據庫啓動,數據庫關閉,服務器錯誤等。

create trigger ad_startup

after startup ondatabase

begin

  --pl/sql代碼

end;

 

5.用戶事件觸發器

create tabledrop_objects(

object_name varchar2(30),

object_type varchar2(30),

dropped_on date

);

 

create or replace

 trigger lo_drop_trigger

 before drop on lzm.schema

 begin

   insert into drop_objects

  values(ora_dict_obj_name,ora_dict_obj_type,sysdate);

 end;

 /

create tabledrop_table(col1 number,col2 number);

create viewview_drop_table(columnA,columnB)

as

select col1,col2

from drop_table;

drop viewview_drop_table;

drop tabledrop_table;

select * fromdrop_objects;

 

二、禁用觸發器:

altertrigger<trigger_name> disable;

altertrigger<trigger_name> enable;

三、查看觸發器信息

selecttrigger_name,table_name from user_triggers;

發佈了46 篇原創文章 · 獲贊 7 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章