Oracle 数据库中的触发器类型(oracle触发器类型)
oracle数据库中的触发器是一种特殊的存储过程,可以在异常事件或表的变化时自动调用,以达到记录日志、修改数据或维护数据的目的。
表触发器: 当对表进行数据更改操作时,触发器会自动被调用,是将更改前后的字段值进行比较,进行条件动作或存储过程的调用,通常触发器只能作用在特定的运算操作,如果操作不满足执行的条件,则不会被调用。
下面是一个常用的表触发器实例:
create trigger insert_update_trigger
before insert or update of a,b on test
for each row
begin
if new.ab then
insert into log values (a,b);
end if;
end;
/
这里,insert_update_trigger是触发器的名称;before是触发器时机,代表是在数据发生改变之前调用;insert or update of a,b :代表当a,b值发生变化时,调用触发器,如果发生其他操作,则不调用;for each row:按行操作,此时new.X表示变化后的字段,可以拿来跟X作比较。
Dml 触发器: DML触发器可以对操作数据的语句进行监听,例如 insert,update,delete,merge等操作,只支持表级触发器。
如下:
create trigger delete_trigger
after delete
on tablename
for each row
begin
insert into log values(delete); //记录删除操作
end;
/
在dml触发器中,通过for each row,可以访问语句操作每行的值,可以根据行值作相应处理,例如log操作和对行进行修改等。
System 触发器:System 触发器是表级的,只对database成员做操作,如DDL,DBMS_ALERT, Server Errors等。
如下:
create trigger error_trigger
after DDL
on database
begin
insert into log values(server errors);
end;
/
System触发器是用来捕获错误的,从而做log的记录,此外,系统触发器也可以监听DDL等操作,当DDL等相关操作发生变化时,能及时捕获每一变化,从而对变化做出相应处理。
总之,Oracle中不同的触发器类型,可以满足不同时机下的应用场景,并能灵活处理数据,在实现某些功能上能提高效率。