oracle筆記九(觸發器)

2021-08-30 12:21:13 字數 2318 閱讀 7832

觸發器:

分類:a).dml觸發器

b).替代觸發器

c).系統觸發器

建立dml觸發器:

create or replace trigger tri_delemp

before delete on scott.emp

for each row

begin

insert into emp_history(empno,ename,job,sal

,comm,hiredate,mgr,deptno)

values(:old.empno,:old.ename,:old.job,:old.sal,

:old.comm,:old.hiredate,:old.mgr,:old.deptno);

end;

create or replace trigger tri_sal

before update or insert of sal on emp

referencing old oo new nn

for each row

begin

if :nn.sal>15000 and :nn.job<>'president' and :nn.job<>'manager' then

dbms_output.put_line('not so many');

end if;

end;

觸發器的限制:

 create trigger語句文字的字元長度不能超過32kb

 觸發器體內的select 語句只能為select … into …結構,或者為定義游標所使用的select 語句

 觸發器中不能使用資料庫事務控制語句 commit, rollback, svaepoint 語句

 由觸發器所呼叫的過程或函式也不能使用資料庫事務控制語句

 觸發器中不能使用long, long raw 型別

dml觸發器中的謂詞:

a). inserting 如果觸發語句是insert,則為true,否則為false

b). updating 如果觸發語句是update,則為true,否則為false

c). deleting 如果觸發語句是delete,則為true,否則為false

create or replace trigger check_emp

before insert or update or delete on emp

for each row

begin

if inserting then

dbms_output.put_line('insert');

elsif updating then

dbms_output.put_line('update');

elsif deleting then

dbms_output.put_line('delete');

else

dbms_output.put_line('others');

end if;

end;

建立替代觸發器:(替代觸發器主要用於對複雜檢視操作進行處理)

create or replace trigger emp_view_del

instead of delete on emp_view

for each row

begin

delete from emp where deptno=:old.deptno;

end;

建立系統級觸發器:

create or replace trigger event_log_tri

after create or alter or drop on database(建立在整個資料庫上,需要用dba身份,可對所以user檢測)

begin

insert into logevent

values(sysevent,dictionary_obj_type,dictionary_obj_name,

dictionary_obj_owner);

end;

create or replace trigger logon_tri

after logon on schema(建立在方案上,即只對本user檢測)

begin

insert into log

values(user,sysdate,'logon');

end;

觸發器狀態:

alter trigger logno_tri disable/enable;

alter table emp disable/enable all triggers;

oracle筆記 觸發器

1.禁止員工在休息日改變雇員資訊 create or replace trigger tri emp before insert or update or delete on emp begin if to char sysdate day nls date language american in...

oracle 觸發器筆記

什麼是觸發器 觸發器是乙個特殊的儲存過程,儲存過程和儲存函式是完成特定功能的乙個pl sql程式,觸發器也是乙個pl sql程式 觸發器的作用 每當乙個特定的資料庫操作語句 insert,update,delete 在指定的表上發出時,oracle自動地執行觸發器中定義的語句序列 觸發器的應用場景 ...

oracle筆記觸發器

pl sql觸發器知識點 行級觸發器 每更新 employees 表中的一條記錄,都會導致觸發器執行 語句級觸發器 乙個 update delete insert 語句只使觸發器執行一次 乙個helloworld級別的觸發器 create or replace trigger hello trigg...