现在的位置: 首页 > 综合 > 正文

17-Oracle学习_触发器

2013年10月28日 ⁄ 综合 ⁄ 共 793字 ⁄ 字号 评论关闭

详细出处参考: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) 回滚

抱歉!评论已关闭.