详细出处参考:http://www.jb51.net/article/18252.htm
触发器
1, 概念
触发器 是特定事件出现的时候,自动执行的代码块。
类似于存储过程,但是用户不能直接调用他们。
2, 例子
(1) 准备
create tabel emp2 as select * from emp; -- 谁 做了什么操作 在什么时间 create table emp2_log ( uname varchar2(20), action varchar2(10), atime date );
(2) 创建
create or replace trigger trig after insert or delete or update -- 执行的时机 on emp2 -- 操作emp2时 for each row -- 每一行数据的更改, 都触发 declare v_action emp2_log.action%type; begin if inserting then v_action := 'insert'; elsif updating then v_action := 'update'; elsif deleting then v_action := 'delete'; end if; insert into emp2_log values(USER, v_action, sysdate); end;
(3) 测试
3, 更新被参考的字段的值
(1) 引出
SQL> update dept set deptno = 99 where deptno = 10; ORA-02292: 违反完整约束条件 (SCOTT.FK_DEPTNO) - 已找到子记录
(2) 创建触发器
drop trigger trig; create or replace trigger trig after update on dept for each row begin update emp set deptno = :NEW.deptno where deptno = :OLD.deptno; end;
(3) 更新 dept
成功
(4) 回滚