Oracle 触发器语法及实例(一)
2008-09-19 12:55:38 来源:WEB开发网例子:
CREATEORREPLACETRIGGERCRM.T_SUB_USERINFO_AUR_NAMEAFTERUPDATEOFSTAFF_NAME
ONCRM.T_SUB_USERINFO
REFERENCINGOLDASOLDNEWASNEW
FOREACHROW
declare
begin
if:NEW.STAFF_NAME!=:OLD.STAFF_NAMEthen
begin
客户投诉
updateT_COMPLAINT_MANAGEsetSERVE_NAME=:NEW.STAFF_NAMEwhereSERVE_SEED=:OLD.SEED;
客户关怀
updateT_CUSTOMER_CAREsetEXECUTOR_NAME=:NEW.STAFF_NAME
whereEXECUTOR_SEED=:OLD.SEED;
客户服务
updateT_CUSTOMER_SERVICEsetEXECUTOR_NAME=:NEW.STAFF_NAME
whereEXECUTOR_SEED=:OLD.SEED;
end;
endif;
endT_sub_userinfo_aur_name;
/
二 Oracle触发器详解
开始:
createtriggerbiufer_employees_department_id
beforeinsertorupdateofdepartment_idonemployees
referencingoldasold_valuenewasnew_value
foreachrow
when(new_value.department_id<>80)
begin
:new_value.commission_pct:=0;
end;
/
1、触发器的组成部分:
1、 触发器名称
2、 触发语句
3、 触发器限制
4、 触发操作
1.1、触发器名称
createtriggerbiufer_employees_department_id
命名习惯:
biufer(beforeinsertupdateforeachrow)
employees表名
department_id列名
1.2、触发语句
比如:
表或视图上的DML语句
DDL语句
数据库关闭或启动,startup shutdown等等
beforeinsertorupdate
ofdepartment_id
onemployees
referencingoldasold_value
newasnew_value
foreachrow
说明:
1、 无论是否规定了department_id,对employees表进行insert的时候
2、 对employees表的department_id列进行update的时候
1.3、触发器限制
when(new_value.department_id<>80)
限制不是必须的。此例表示如果列department_id不等于80的时候,触发器就会执行。
其中的new_value是代表更新之后的值。
1.4、触发操作
是触发器的主体
begin
:new_value.commission_pct:=0;
end;
主体很简单,就是将更新后的commission_pct列置为0
触发:
insertintoemployees(employee_id,last_name,first_name,hire_date,job_id,email,
department_id,salary,commission_pct)
values(12345,’Chen’,’Donny’,sysdate,12,‘donny@hotmail.com’,60,10000,.25);
selectcommission_pctfromemployeeswhereemployee_id=12345;
触发器不会通知用户,便改变了用户的输入值。
赞助商链接