如何新建语句级触发器、用户事件触发器

--建立日志表,用于触发器的触发情况
create table lok.log
(
operate_tag varchar2(10),
operate_time date
);

--新建一个触发器
create or replace trigger lok.tri_dept
before insert or delete or update
on lok.dept

declare
   operate_tag varchar2(10);
   begin
     if inserting then
       operate_tag := '插入';
       elsif updating then
       operate_tag := '更新';
       elsif deleting then
       operate_tag := '删除';
       end if;
       insert into lok.log
       values(operate_tag,sysdate);
       end tri_dept;
             

--执行插入、更新、删除语句
insert into lok.dept values(66,'业务咨询部','广州');
commit;
update lok.dept set loc = '沈阳' where deptno = 66;
commit;
delete from lok.dept where deptno = 66;
commit;

--查看lok.log表中的数据情况
select t.* from lok.log t;

结果如下图:
 

--创建一个日志信息表,用于保存DDL操作的信息
create table lok.oper_log(
 db_obj_name varchar2(20),
 db_obj_type varchar2(20),
 oper_action varchar2(20),
 oper_user   varchar2(20),
 oper_date   date
);

--创建用户事件触发器
create or replace trigger lok.tri_ddl_oper
  before create or alter or drop
  on lok.schema
  begin
    insert into lok.oper_log values(
    ora_dict_obj_name,
    ora_dict_obj_type,
    ora_sysevent,
    ora_login_user,
    sysdate
    );
    end;
   
--在lok的模式下创建表和视图,然后删除视图和修改表数据
create table lok.test(id number);
create view lok.view_test as select * from lok.dept;
drop view lok.view_test;

-- 查询lok.oper_log的信息
select * from lok.oper_log;

结果如下图:


 

posted on 2013-12-25 22:03  兔斯基摩洛哥  阅读(513)  评论(0)    收藏  举报

导航