Oracle学习(五)

Oracle中触发器的使用

具体应用 :

create trigger trg_view_sy_scrap_entryno_head--触发器名
before update--update触发器
of drum_no--触发字段drum_no
on view_sy_scrap_entryno_head--触发的表或视图view_sy_scrap_entryno_head
referencing old as old_value--触发前的行值old_value
            new as new_value--触发后的行值new_value
for each row
when (new_value.department_id<>80 )--department_id不等于80触发器才执行
begin
:new_value.commission_pct :=0;
end;

--oracle 里面 对触发器 也提供了特殊的对象 :NEW :OLD 来访问更新前后的数据

before和after:指在事件发生之前或之后激活触发器。
instead of:如果使用此子句,表示可以执行触发器代码来代替导致触发器调用的事件。
insert、delete和update:指定构成触发器事件的数据操纵类型,update还可以制定列的列表。
referencing:指定新行(即将更新)和旧行(更新前)的其他名称,默认为new和old。
table_or_view_name:指要创建触发器的表或视图的名称。
for each row:指定是否对受影响的每行都执行触发器,即行级触发器,如果不使用此子句,则为语句级触发器。
when:限制执行触发器的条件,该条件可以包括新旧数据值得检查。
declare---end:是一个标准的PL/SQL块。

 

 

以下是我自己写的一个触发器,用于对视图进行增删改。

CREATE OR REPLACE TRIGGER TRG_V_CLASSINFO INSTEAD OF DELETE OR UPDATE OR INSERT on USER_YTT.V_CLASSINFO//视图名称 FOR EACH ROW BEGIN IF DELETING THEN//删除操作 DELETE FROM USER_YTT.T_CLASS WHERE CLASSID=:OLD.CLASSID; ELSIF UPDATING THEN//修改操作 UPDATE USER_YTT.T_CLASS SET CLASSNAME=:NEW.CLASSNAME, CLASSTYPEID=:NEW.CLASSTYPEID WHERE CLASSID=:OLD.CLASSID; ELSIF INSERTING THEN//增加操作 INSERT INTO USER_YTT.T_CLASS VALUES(S_CLASSID.NEXTVAL,:NEW.CLASSNAME,:NEW.CLASSTYPEID); END IF; END; 

你可能感兴趣的:(Oracle学习(五))