触发器
常用触发器
1 -- 行级触发器 2 3 --当对一个emp进行删除时将原数据进行备份 4 --创建备份表 5 create table emp_BAk as select * from emp; 6 truncate table emp_BAk; 7 -- 触发器 8 create or replace trigger bak_emp 9 before delete -- 在删除之前 10 on emp --触发器作用在emp表上 11 for each row -- 标识为行级触发器,也就是每影响一行就执行一次 12 -- 触发器的主体部分 13 declare 14 begin 15 insert into emp_BAk values(:old.empno,:old.ename,:old.job,:old.mgr,:old.hiredate,:old.sal,:old.comm,:old.deptno); 16 end; 17 -- 删除数据时,会将删除的数据保存到emp_BAk表中 18 delete emp where empno = 7369; 19 --把删除的数据恢复到原表中 20 insert into emp select * from emp_bak; 21 --清除备份表 22 truncate table emp_bak; 23 24 25 -- 语句级触发器 26 -- 当插入、更新、删除emp表时进行显示信息 27 create trigger show_emp_info 28 after delete or insert or update 29 on emp 30 --for each row -- 不要这条命令就是语句级触发器 31 declare 32 33 begin 34 if updating then 35 dbms_output.put_line('触发器提示:更新emp表中数据'); 36 elsif deleting then 37 dbms_output.put_line('触发器提示:删除emp表中数据'); 38 elsif inserting then 39 dbms_output.put_line('触发器提示:插入emp表中数据'); 40 end if; 41 end; 42 -- 测试 43 update emp set sal = 500 where empno = 7369; 44 delete emp where empno = 7369; 45 insert into emp select * from scott.emp where empno = 7369; 46 47 48 -- 模式触发器(确保你的数据库中有archer用户) 49 create table archer_event( 50 event nvarchar2(20), 51 username varchar2(10), 52 owner varchar2(10), 53 objname varchar2(20), 54 objtype varchar2(20), 55 datetime date 56 ); 57 58 create or replace trigger tr_archer 59 after ddl 60 on archer.schema 61 declare 62 63 begin 64 insert into archer_event values(ora_sysevent,ora_login_user, 65 ora_dict_obj_owner,ora_dict_obj_name,ora_dict_obj_type,sysdate); 66 end; 67 -- 当archer用户创建数据表时会将信息保存到archer_event表中 68 create table abc( 69 id number, 70 name varchar2(10) 71 ); 72 -- 查看表中的数据 73 select * from archer_event;