精通Oracle数据库触发器的类型
Oracle数据库触发器是一种特殊的数据库对象,它可以定义在表中执行的动作,在特定的条件下被触发,它使数据库开发者有能力将多个操作组合到一个对象中, 有效的改进了程序的可维护性和可重复性。Oracle数据库中的触发器一般可以分为4种类型:表触发器,语句触发器,行触发器和事件触发器。
表触发器将以定义的时机被激活,表触发器可以检测表上的操作:INSERT,UPDATE 或 DELETE 操作,它是其他触发器的内部触发器,也就是说,一个表触发器可以触发另一个触发器。例如下面的代码展示了如何在表中创建一个表触发器:
create or replace trigger tab_trigger
after insert on table_name
begin
insert into new_table (col1,col2)
values (:new.col1,:new.col2);
end;
语句触发器也叫级联触发器,它用来保证一个特定操作引发多个动作,既可以在Oracle系统事件的发生时发生,也可以在表触发器被触发时发生,如下面的例子所示:
create or replace trigger st_trigger
after insert on tab1
begin
insert into tab2
select * from tab1 where x = new.x;
end;
行触发器也称为行级触发器,它是在每一行上执行,无论是否触发其他触发器,下面的代码能很好的说明行触发器:
create or replace trigger row_trigger
after insert on tab1
for each row
begin
insert into tab2 values(:new.col1, :new.col2);
end;
最后,还有事件触发器,它是一种特殊的表级触发器,能响应一个指定的事件,在这种触发器中,SQL操作的触发不是作为触发条件来识别的,而是一个特殊的系统事件触发的,如下面的代码所示:
create or replace trigger event_trigger
after servererror on database
begin
-- do something
end;
从上面可以看出,Oracle数据库中的触发器类型包括表触发器、语句触发器、行触发器和事件触发器。要想精通Oracle数据库触发器,不但要熟悉不同类型的触发器,更要懂得这些触发器的使用场景、定义以及常见的优化策略。