触发器

常用触发器

 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;

 

posted @ 2016-09-24 12:28  云苇  阅读(165)  评论(0编辑  收藏  举报