oralce第六天——触发器

--触发器

--1.概念:具备某些条件时,由数据库自动执行的一些DML操作行为;

--2.语句触发器,针对整个表(主要用户权限判断和日志操作)
  --语法:
    create trigger 触发器名称
    before/after 出发动作(可以触发多个动作,用or连接)
    on 作用对象
    
  --谓词:用于记录用户操作日志,比如某个用户什么时间进行了什么操作;
    触发器谓词:inserting,updating ,deleting
    
  --示例1:insert 
    create trigger tr_book
    before insert
    on t_book
    begin
      if user != 'cc' then --如果不是cc用户,就报错
        raise_application_error(-20001,'权限不足');
      end if;
    end;
    
  --示例2:update or delete
    create trigger tr_book2
    before update or delete
    on t_book
    begin
      if user != 'cc' then --如果不是cc用户,就报错
        raise_application_error(-20001,'权限不足');
      end if;
    end;
  
  --示例3,记录用户操作日志:
    create trigger tr_book_log
    before insert or update or delete
    on t_book
    begin
      --用谓词记录日志
      if updating then   --更新操作
        insert into t_book_log values(book_seq.nextval,user,'update',sysdate);
      else if inserting then --插入操作
        insert into t_book_log values(book_seq.nextval,user,'insert',sysdate);
      else if deleting then   --删除操作
        insert into t_book_log values(book_seq.nextval,user,'delete',sysdate);
      end if;
      end if;
      end if; 
    end;
    /
    
    

--3.行触发器(常用,重点)
  --语法:
    create trigger 触发器名称
    before/after 出发动作
    for each row
    on 作用对象
    
    触发器谓词::old , :new
  
  
  --示例1:t_book表中每新增一条记录,都把对应的t_book_type相应的类别加1;
    --:new可以记录新增的数据
    create trigger t_book_add
    after insert
    on t_book
    for each row
    begin
      update t_book_type set num = num +1 where id = :new.typeid;
    end;
    /
    
  --示例2:t_book表中每删除一条记录,都把对应的t_book_type相应的类别减1;
    --:old可以记录删除的数据
    create trigger t_book_del
    after delete
    on t_book
    for each row
    begin
      update t_book_type set num = num - 1 where id = :old.typeid;
    end;
    /
    
--4.触发器的禁用和开启
  --禁用触发器:alter trigger 触发器名称 disable
  --开启触发器:alter trigger 触发器名称 enable
  
  --示例:
    alter trigger tr_book disable;--禁用
    alter trigger tr_book disable;--开启
  
    
    
    
    
    

 

posted @ 2016-12-07 22:20  Revel  阅读(136)  评论(0)    收藏  举报