如何新建语句级触发器、用户事件触发器
--建立日志表,用于触发器的触发情况
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;
结果如下图:

浙公网安备 33010602011771号