ORACLE数据库四种触发器别DML、Instead-of、DDL、DB触发器般应用系统都用DML、Instead-of触发器DDL、DB两种触发器DBA管理数据库用比较
四种触发器别同作用
一、DML触发器:发UPDATE、INSERT、DELETE命令触发已定义DML触发器简单用种触发器
语:
create or replace trigger trigger_name
after|before insert|update|delete
on table_name
for each row
二、Instead-of触发器:向由表联接视图作DML操作般情况允许候用Instead-of触发器解决种问题(触发器写代码别各表作相应DML操作)语:
create or replace trigger trigger_name
instead of insert|update|delete
on view_name
for each row
如:需求是在t_order中插入数据,就会向临时备份表t_order_temp中插入相同的数据
create or replace trigger tri_order
after insert on t_order
for each row
begin
insert into t_order_temp(ORDERID,createtime,EXPIRETIME,BEGINTIME)
values(:new.ORDERID,to_char(:new.createtime,'yyyy-mm'), to_char(:new.EXPIRETIME,'yyyy-mm'),to_char(:new.BEGINTIME,'yyyy-mm'));
end;
三、DDL触发器:发CREATE、ALTER、DROP、TRUNCATE命令触发已定义DDL触发器种触发器用监控某用户或整数据库所象结构变化
语:
create or replace trigger trigger_name
before|after create|alter|drop|truncate
on schema|database
例:
--禁止用CREATE、ALTER、DROP、TRUNCATE命令操作APPS用户象
create or replace trigger apps_no_ddl
before create or alter or drop or truncate
on apps
begin
raise_application_error(-20001,'允许用DDL操作APPS用户象');
end;
四、DB事件触发器:STARTUP、SHUTDOWN、LOGON、LOGOFF数据库触发DB事件触发器种触发器用监控数据库候关闭/打或者用户LOGON/LOGOFF数据库情况
语:
create or replace trigger trigger_name
before|after startup|shutdown|logon|logoff
on database
例:
--记录数据库关闭间(shutdown类型要用关键字beforestartup用after)
create or replace trigger db_shutdown
before shutdown
on database
begin
insert into test_tbl(log_event) values('db shutdown at '||to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'));
commit;
end;
--记录用户LOGON间(logoff类型要用关键字beforelogon用after)
create or replace trigger user_logon_db
after logon
on database
begin
insert into test_tbl(username,logon_time) values(user,to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'));
commit;
end;
注意:要创建DDLDB事件两种触发器必须要DBA权限才行
浙公网安备 33010602011771号