您好,登錄后才能下訂單哦!
什么是觸發(fā)器【Trigger】?
不同的DML(select/update/delete/insert)操作,觸發(fā)器能夠進(jìn)行一定的攔截,符合條件的操作方可操作基表;反之,不可操作基表。類似于JavaWeb中的Filter、Struts2中的Iterceptor。
為什么要用觸發(fā)器?
如果沒有觸發(fā)器,那么DML所有操作,均可無限制地操作基表,這樣一來,不符合業(yè)務(wù)需求。
創(chuàng)建語句級觸發(fā)器insertEmpTrigger,當(dāng)對表【emp】進(jìn)行增加【insert】操作前【before】,顯示"hello world"
create or replace trigger insertEmpTrigger before insert on emp begin dbms_output.put_line('hello world'); end; /
刪除觸發(fā)器insertEmpTrigger,語法:drop trigger 觸發(fā)器名
drop trigger insertEmpTrigger;
使用insert語句插入一條記錄,引起insertEmpTrigger觸發(fā)器工作
insert into emp(empno,ename) values(1234,'小明');
使用insert語句插入N條記錄,引起insertEmpTrigger觸發(fā)器工作
insert into emp select * from xxx_emp;
創(chuàng)建語句級觸發(fā)器deleteEmpTrigger,當(dāng)對表【emp】進(jìn)行刪除【delete】操作后【after】,顯示"world hello"
create or replace trigger deleteEmpTrigger before delete on emp begin dbms_output.put_line('刪除數(shù)據(jù)'); end; /
使用delete語句刪除一條記錄,引起deleteEmpTrigger觸發(fā)器工作
delete from emp where empno=7369;
使用delete語句刪除N條記錄,引起deleteEmpTrigger觸發(fā)器工作
delete from emp where 1=1;
星期一到星期五,且9-20點能向數(shù)據(jù)庫emp表插入數(shù)據(jù),否則使用函數(shù)拋出異常,
語法:raise_application_error('-20000','例外原因')
create or replace trigger securityTrigger before insert on emp declare pday varchar2(20); phour number(2); begin select to_char(sysdate,'day') into pday from dual; select to_char(sysdate,'hh34') into phour from dual; if pday in ('星期六','星期日') or phour not between 7 and 22 then raise_application_error('-20000','非工作時間,不能向emp表添加數(shù)據(jù)'); end if; end; /
創(chuàng)建行級觸發(fā)器checkSalaryTrigger,漲后工資這一列,確保大于漲前工資,語法:for each row/:new.sal/:old.sal
create or replace trigger checkSalaryTrigger after update of sal on emp for each row begin if :new.sal <= :old.sal then raise_application_error('-20200','工資不能越長越低'); end if; end; /
其中,需要注意的地方
(1)update of sal是對列的更新進(jìn)行觸發(fā)
(2)for each row
(3):new和:old代表一行記錄
(4)raise_application_error中-20000和-20200之間允許開發(fā)者自定義錯誤
刪除觸發(fā)器,表還在嗎?
基表還在;觸發(fā)器不會進(jìn)回收站,直接徹底刪除
將表丟到回收站,觸發(fā)器還在嗎?
觸發(fā)器還在
當(dāng)閃回表后,觸發(fā)器會在嗎?
在
徹底刪除表,觸發(fā)器會在嗎?
原來的觸發(fā)器也被刪除了
新的同樣的名字的表,是不是繼承原來的觸發(fā)器的
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。