本节主要内容:
oracle触发器
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) 回滚