(11)oracle触发器
触发器是特殊的存储过程。
每当一个特定的数据操作语句(inster,update,delete)在指定的表上触发时,Oracle自动的地执行触发器中定义的语句序列。
create trigger 触发器名 (brfore、after) insert(update、delete) on 表名 declare begin . . . end; /
更新指定列触发
create trigger 触发器名 (brfore、after) update 列明 on 表名 for each row [where条件 ]--按行触发 declare begin . . . end; /
语句级触发器:在之指定的语句操作前或后执行一次,不管语句影响多少行
行级触发器:出发语句作用的每条记录都被触发。在行级触发器中使用:old和:new伪记录变量,识别值得状态。
例子
1.复杂得安全性检查
禁止非工作时间插入数据到员工表
2.数据确认
create or replace trigger a before update on emp for each row begin if :old.sal>:new.sal raise_applcation_error(-20002,'涨后的薪水不能小于涨前的薪水') end if; end; /
3.数据库审计
4.数据库的同步和备份
创建自增序列和触发器
DROP SEQUENCE SEQ_TITLE; DROP TRIGGER TR_TITLE; -- -- SEQUENCE: SEQ_TITLE -- CREATE SEQUENCE SEQ_TITLE START WITH 1 INCREMENT BY 1 NOMINVALUE NOMAXVALUE CACHE 20 NOORDER; -- -- TRIGGER: TR_TITLE -- create or replace trigger TR_TITLE before insert on T_TITLE for each row begin select SEQ_TITLE.nextval into :new.TITLE_ID from dual; end; /