建站服務(wù)器 一 ORACLE觸發(fā)器語法
http://www.zw1840.com/oracle/translation/concepts/html/22.Triggers.htm
http://www.zw1840.com/oracle/index.htm
觸發(fā)器是特定事件出現(xiàn)的時候,自動執(zhí)行的代碼塊。類似于存儲過程,觸發(fā)器與存儲過程的區(qū)別在于: 存儲過程是由用戶或應(yīng)用程序顯式調(diào)用的,而觸發(fā)器是不能被直接調(diào)用的。
觸發(fā)器觸發(fā)時間有兩種:after和before。
CREATE [OR REPLACE] TIGGER 觸發(fā)器名 觸發(fā)時間 觸發(fā)事件
ON 表名
[FOR EACH ROW]
BEGIN
pl/sql 語句
END
其中:
觸發(fā)器名:觸發(fā)器對象的名稱。
由于觸發(fā)器是數(shù)據(jù)庫自動執(zhí)行的,因此該名稱只是一個名稱,沒有實(shí)質(zhì)的用途。
觸發(fā)時間:指明觸發(fā)器何時執(zhí)行,該值可?。?/P>
before---表示在數(shù)據(jù)庫動作之前觸發(fā)器執(zhí)行;
after---表示在數(shù)據(jù)庫動作之后出發(fā)器執(zhí)行。
觸發(fā)事件:指明哪些數(shù)據(jù)庫動作會觸發(fā)此觸發(fā)器:
insert:數(shù)據(jù)庫插入會觸發(fā)此觸發(fā)器;
update:數(shù)據(jù)庫修改會觸發(fā)此觸發(fā)器;
delete:數(shù)據(jù)庫刪除會觸發(fā)此觸發(fā)器。
表 名:數(shù)據(jù)庫觸發(fā)器所在的表。
for each row:對表的每一行觸發(fā)器執(zhí)行一次。如果沒有這一選項(xiàng),則只對整個表執(zhí)行一次。
2、舉例:下面的觸發(fā)器在更新表auths之前觸發(fā),目的是不允許在周末修改表:
create trigger auth_secure before insert or update or delete //對整表更新前觸發(fā)
on auths
begin
if(to_char(sysdate,\'DY\')=\'SUN\'
RAISE_APPLICATION_ERROR(-20600,\'不能在周末修改表auths\');
end if;
end
例子:
CREATE OR REPLACE TRIGGER CRM.T_SUB_USERINFO_AUR_NAME AFTER UPDATE OF STAFF_NAME
ON CRM.T_SUB_USERINFO
REFERENCING OLD AS OLD NEW AS NEW
FOR EACH ROW
declare
begin
if :NEW.STAFF_NAME!=:OLD.STAFF_NAME then
begin
--客戶投訴
update T_COMPLAINT_MANAGE set SERVE_NAME=:NEW.STAFF_NAME where SERVE_SEED=:OLD.SEED;
--客戶關(guān)懷
update T_CUSTOMER_CARE set EXECUTOR_NAME=:NEW.STAFF_NAME
where EXECUTOR_SEED=:OLD.SEED;
--客戶服務(wù)
update T_CUSTOMER_SERVICE set EXECUTOR_NAME=:NEW.STAFF_NAME
where EXECUTOR_SEED=:OLD.SEED;
end;
end if;
end T_sub_userinfo_aur_name;
/
二 Oracle觸發(fā)器詳解1、觸發(fā)器的組成部分:
1.1、觸發(fā)器名稱
1.2、觸發(fā)語句
1.3、觸發(fā)器限制
1.4、觸發(fā)操作
2、觸發(fā)器的類型有:
2.1、語句級觸發(fā)器.(語句級觸發(fā)器對每個DML語句執(zhí)行一次)
是在表上或者某些情況下的視圖上執(zhí)行的特定語句或者語句組上的觸發(fā)器。能夠與INSERT、UPDATE、DELETE或者組合上進(jìn)行關(guān)聯(lián)。但是無論使用什么樣的組合,各個語句觸發(fā)器都只會針對指定語句激活一次。比如,無論update多少行,也只會調(diào)用一次update語句觸發(fā)器。
實(shí)例:
create or replace trigger tri_test
after insert or update or delete on test
begin
if updating then
dbms_output.put_line(\'修改\');
elsif deleting then
dbms_output.put_line(\'刪除\');
elsif inserting then
dbms_output.put_line(\'插入\');
end if;
end;
2.2、行級觸發(fā)器.(行級觸發(fā)器對DML語句影響的每個行執(zhí)行一次)實(shí)例一:
--觸發(fā)器
--行級觸發(fā)器
create table test(sid number,sname varchar2(20));--創(chuàng)建一個表
create sequence seq_test;--創(chuàng)建序列
create or replace trigger tri_test--創(chuàng)建觸發(fā)器
before insert or update of sid on test
for each row--觸發(fā)每一行
begin
if inserting then
select seq_test.nextval into:new.sid from dual;
else
raise_application_error(-20020,\'不允許更新ID值!\');--中斷程序
end if;
end;
--測試,插入幾條記錄
insert into test values(0,\'ff\');
insert into test values(0,\'ff\');
insert into test values(0,\'tt\');
輸出結(jié)果如下圖所示:
實(shí)例二:
--創(chuàng)建一個觸發(fā)器,無論用戶插入新記錄,還是修改emp表的job列,都將用戶指定的job列的值轉(zhuǎn)換成大寫.
create or replace trigger trig_job
before insert or update of job
on emp
for each row
<SPAN lang=EN-US style=FONT-FAMILY: 宋體; mso-bidi-font-size: 10.5
本文題目:ORACLE觸發(fā)器語法及實(shí)例一
地址分享:http://www.rwnh.cn/article12/cgjdgc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站、靜態(tài)網(wǎng)站、自適應(yīng)網(wǎng)站、全網(wǎng)營銷推廣、App設(shè)計(jì)、定制網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)