您的位置:首页 > 数据库 > Oracle

Oracle初探(八)

2015-08-07 08:05 405 查看
触发器和条件谓词,笔记为:
------------触发器
/*
      create  or replace trigger 名称
      after/before insert/update/delete on emp
      begin
        
      end;
      开启触发器
      insert/update/delete操作
*/
set serveroutput on;

create  or replace trigger trigger_add
after insert on emp
begin
      dbms_output.put_line('boom shakalaka!!');
end;
/

insert emp value(1001);

create  or replace trigger trigger_t1
before delete on emp
begin
      if to_char(sysdate,'day') in ('星期四','星期日') then
         raise_application_error(-20001,'今天是周末,数据库要休息!!');
      end if;
end;

--------------条件谓词:可以同时执行dml所有操作 
   ----监控emp表的操作(编号、操作人,操作时间、操作动作)
create table emp_log
(
       log_id number(8) primary key,
       username varchar2(20),
       op_date date,
       op_content varchar2(20)
);

create sequence seq_id;

create  or replace trigger trigger_log
after insert or delete or update on emp
declare
    v_content varchar2(20);
begin
      case
        when inserting then v_content :='增加';
        when deleting then v_content :='删除';
        when updating then v_content :='更新';
      end case;
      insert into emp_log values(seq_id.nextval,user,sysdate,v_content);    
end;
/

----------------old、new

-------------删除表中的数据,然后通过触发器提供的伪表方式来进行备份操作  (t1表做为示例)

-------update操作old、new表 :new、:old (同步备份)
-------delete操作old表     :old (要备份)
-------insert操作new表     :new (不用备份)

create table t1(tid number(8),tname varchar2(20));
---1、创建一张伪表
create table copyt1 as select * from t1 where 1<>1;
--2、创建数据备份的触发器
 
create or replace trigger trigger_copyt1
after delete   on t1
for each row
begin
   --当t1表中的数据被删除,则往copyt1表中插入被删除的数据
   insert into copyt1 values (:old.tid,:old.tname);
end;
/
  

-----------------------------修改数据,备份表数据同步更新
create or replace trigger trigger_copyt2
after update   on t1
for each row
begin
  --当源表直接更新,则备份表数据同步更新
   update copyt1 set tname = :new.tname where tid = :old.tid;
end;
/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: