oracle触发器
触发器的界说便是说某个条件成立的时候,触发器里边所界说的句子就会被主动的履行。因而触发器不需要人为的去调用,也不能调用。然后,触发器的触发条件其实在你界说的时候就现已设定好了。这里边需要阐明一下,触发器能够分为句子级触发器和行级触发器。具体的介绍能够参阅网上的材料,简略的说便是句子级的触发器能够在某些句子履行前或履行后被触发。而行级触发器则是在界说的了触发的表中的行数据改动时就会被触发一次。
具体举例:
1、在一个表中界说的句子级的触发器,当这个表被删去时,程序就会主动履行触发器里边界说的操作过程。这个便是删去表的操作便是触发器履行的条件了。
2、在一个表中界说了行级的触发器,那当这个表中一行数据发生变化的时候,比方删去了一行记载,那触发器也会被主动履行了。
触发器语法
触发器语法:
create[orreplace]tigger触发器名触发时刻触发事情on表名[foreachrow]beginpl/sql句子end
其中:
触发器名:触发器目标的称号。因为触发器是数据库主动履行的,因而该称号只是一个称号,没有实质的用途。
触发时刻:指明触发器何时履行,该值可取:
before:表明在数据库动作之前触发器履行;
after:表明在数据库动作之后触发器履行。
触发事情:指明哪些数据库动作会触发此触发器:
insert:数据库插入会触发此触发器;
update:数据库修正会触发此触发器;
delete:数据库删去会触发此触发器。
表名:数据库触发器地点的表。
foreachrow:对表的每一行触发器履行一次。假如没有这一选项,则只对整个表履行一次。
触发器能实现如下功用:
1、允许/限制对表的修正
2、主动生成派生列,比方自增字段
3、强制数据一致性
4、提供审计和日志记载
5、防止无效的事务处理
6、启用杂乱的事务逻辑
oracle触发器写法和作用
1、declare声明变量后的每个变量都要加分号;
2、所有的语句结束和sql语句结尾,都要加分号;
3、变量赋值variable:=’1234′
如:recordId:=’1234′;
4、插入列数据获取:new.colname
如:new.exec_record_id
5、sql查询写入变量selectcolnameintovariable
如:selectverify_dateintoexecDatefromorders_executed_recordwhererecord_id=’1234′;
触发器举例:
CREATEORREPLACETRIGGER"TR_NUTRITION"
afterupdateoninp_bill_detail
foreachrow
declare
myexpexception;
execDatedate;
recordIdvarchar2(30);
begin
recordId:=:new.exec_record_id;
if:new.exec_record_idisnotnullthen
selectnvl(oen.verify_date,oer.execute_date_time)intoexecDate
fromorders_executed_recordoerleftjoinorders_executed_nutritionoenonoer.record_id=oen.record_id
whereoer.record_id=recordId;
ifexecDateisnotnullthen
raisemyexp;
endif;
endif;
exception
whenmyexpthenraise_application_error('-20002','计费后,执行(核对)日期不能为空,计费ID='||:new.detail_no||'执行ID='||recordId);
end
评论前必须登录!
注册