oracle中觸發器的講解

2022-05-02 20:48:11 字數 2606 閱讀 7950

觸發器在資料庫裡以獨立的物件儲存,它與儲存過程和函式不同的是,儲存過程與函式需要使用者顯示呼叫才執行,而觸發器是由乙個事件來啟動執行。即觸發器是當某個事件發生時自動地隱式執行。並且,觸發器不能接收引數。所以執行觸發器就叫觸發或點火(firing)。oracle事件指的是對資料庫的表進行的insert、update及delete操作或對檢視進行類似的操作。oracle將觸發器的功能擴充套件到了觸發oracle,如資料庫的啟動與關閉等。所以觸發器常用來完成由資料庫的完整性約束難以完成的複雜業務規則的約束,或用來監視對資料庫的各種操作,實現審計的功能。

create sequence seq_userinfo_usid start with 1001;

create or replace triggle tri_userinfo_usid --建立或替換觸發器tri_userinfo_usid

before insert on userinfo --在向userinfo表中新增 記錄之前的觸發

for each row --沒影響一行出發一次

begin --觸發之後執行下面的語句

select seq_userinfo_usid.nextval into :new.usid from dual; --:new新值 :old老值

end;

案列--日誌 觸發器講解

--檢視所有觸發器

select * from user_triggers;

--禁用觸發器

alert trigger tri_log_uname(觸發器名字) disable;

--啟用觸發器

alert trigger tri_log_uname(觸發器名字) enble;

--重新編譯

alert trigger tri_log_uname complie;

--禁用某個表上的觸發器

alert table diable all triggers;

create table log(

uname varchar2(20),

action varchar2(10),

acttime date

);--從u001開始,以遞增的形式對uname進行命名

create sequence seq_log_uname start with 1001;

create or replace trigger tri_log_uname

before insert on log

for each row

begin

select 'u'||substr(seq_log_uname.nextval,1) into :new.uname from dual;

end;

insert into log values(1,'yc',sysdate);

select * from log;

create or replace trigger tri_log

after insert or update or delete on dept

for each row --for each 行級觸發,執行語句沒影響一行出發一次,預設是語句級觸發,沒執行一條語句觸發一次,無論該語句影響多少行,

begin

if inserting then

insert into log values(user,'insert',sysdate);

elsif updating then

insert into log values(user,'update',sysdate);

elsif deleting then

insert into log values(user,'delete',sysdate);

end if;

end;

select * from dept;

insert into dept values(80,'技術部','湖南衡陽');

select * from log;

--更改dept和emp中的deptno的值(涉及主外來鍵)

create or replace trigger tri_dept

before update on dept

for each row

begin

update emp set deptno=:new.deptno where deptno=:old.deptno;

end;

update dept set deptno=88 where deptno=20;

select * from dual;

select * from dept;

select * from emp;

create or replace trigger tri_emp

before update of sal on emp --當修改emp表中的sal列在值時

for each row

when(new.sal<=old.sal)

begin

select 3000 into :new.sal from dual;

end;

select * from emp;

update emp set sal=4000 where empno=7369;

觸發器講解

觸發器是一種特殊的儲存過程,類似於其它程式語言中的事件函式,sql server 允許為 insert update delete 建立觸發器,當在表 檢視 中插入 更新 刪除記錄時,觸發乙個或一系列 t sql 語句。本專題的目的並非是向您詳盡地介紹觸發器,而是系統地向您介紹觸發器的常用知識與相關...

Oracle中的觸發器

oracle 中的觸發器 在oracle 中,觸發器是一種特殊的子程式,它在插入 更新 刪除資料時自動執行。使用觸發器可以實現比較複雜的約束。pk fk uq ck df 都是單錶約束資料完整性。觸發器可以分為 insert 觸發器 update 觸發器 delete 觸發器。insert 觸發器在...

Oracle觸發器的概念以及寫法講解

觸發器是儲存在伺服器中的程式單元,當資料庫中某些事件發生時 比如insert update delete 資料庫自動啟動觸發器,執行觸發器中的相應操作。1 觸發器是一種特殊的儲存過程,具備事務的功能 2 觸發器不能被直接呼叫,而是由事件來觸發 例如 增刪改 3 觸發器常用於加強資料的完整性約束和業務...