案例2:数据校验,不允许星期二和星期四向emp1表中插入/更新数据。
create or replace trigger trigger2 before insert or update on job1 declare v_day varchar2(20); begin ---判断今天是否是星期二或星期四 select to_char(sysdate,'day') into v_day from dual; ---判断 if v_day = '星期二' then dbms_output.put_line('今天是星期二,不能插入/更新数据!'); raise_application_error(-20001,'今天是星期二,不能插入/更新数据!'); if v_day = '星期四' then dbms_output.put_line('今天是星期四,不能插入/更新数据!'); raise_application_error(-20001,'今天是星期四,不能插入/更新数据!'); end if; end if; end;
触发器创建完成后,可向job1表插入一行数据验证效果。
--插入数据,触发触发器的执行 insert into job1 values('rui1','Prisident',15000,30000);
效果如下:
案例3:创建触发器,记录表的删除数据
--创建job1_log表用于记录job1表的删除记录 create table job1_log as select * from job1 where 1<>1; --创建触发器 create or replace trigger trigger3 after delete on job1 for each row begin insert into job1_log values(:old.job_id,:old.job_title,:old.min_salary,:old.max_salary); dbms_output.put_line('记录已经成功删除并记录到日志'); end;
触发器创建完成后,可删除job1表一行数据验证效果。
--测试 delete from job1 where job_id='ruirui';
效果如下:
案例4:创建触发器,记录表的更新数据
--创建日志记录表 create table test_log( l_user varchar2(15), l_type varchar2(15), l_date varchar2(20) ); --创建触发器 create or replace trigger trigger4 after delete or insert or update on job1 declare v_type test_log.l_type%type; begin if deleting then v_type := 'delete'; dbms_output.put_line('记录已经成功删除并记录到日志'); elsif inserting then v_type := 'insert'; dbms_output.put_line('记录已经成功插入并记录到日志'); elsif updating then v_type := 'update'; dbms_output.put_line('记录已经成功更新并记录到日志'); end if; insert into test_log values(user,v_type,to_char(sysdate,'yyyy-mm-dd hh24:mi:ss')); end;
触发器创建完成后,可更新job1表中数据验证效果。
--测试 insert into job1 values('rui1','Prisident',15000,30000);
update job1 set min_salary=20000 where job_id='rui1';
delete from job1 where job_id='rui1';
查询test_log表中记录如下:
select * from test_log;
案例5:创建触发器,在删除某条数据之前先在记录表插入该条数据
--创建job1_log表用于记录job1表的删除记录 create table test1_log as select * from job1 where 1<>1; --创建触发器 create or replace trigger trigger5 before delete on job1 for each row --行级触发器 begin insert into test1_log values(:old.job_id,:old.job_title,:old.min_salary,:old.max_salary); end;
触发器创建完成后,可更新job1表中数据验证效果。
--测试 delete from job1 where job_id='rui2'; commit;
查询test1_log表中记录如下:
select * from test01_log;
参考:Oracle数据库 触发器
到此这篇关于Oracle 触发器trigger概述的文章就介绍到这了,更多相关Oracle 触发器trigger内容请搜索