掌握Oracle触发器类型,实现数据库自动化管理(oracle触发器类型)

Oracle触发器是数据库系统中最重要的一个应用,它能帮助用户自动化数据库的管理,极大的提升了用户的工作效率。面对复杂的数据库应用, 数据库开发人员需要仔细研究Oracle触发器的类型,以深入理解Oracle的数据库开发解决方案和实现数据库自动化。

Oracle触发器分为五种类型:Row Level触发器、Statement Level触发器、Before触发器、After触发器和Instead Of触发器。Row Level触发器,也称作行触发器,只对行级别的操作起作用,实际上是一种改变数据库行的操作,其主要用于实现查询表和修改表的操作。例如:

— 创建一个用于修改表Product表每条记录前加上当前日期时间的Row Level触发器

create trigger before_insert_product

before insert on Product

for each row

begin

:new.created_time := sysdate;

end;

Statement Level触发器,也称作语句触发器,只对整个语句级别操作起作用,主要用于实现添加表、删除表和修改表的操作。例如:

— 创建一个用于添加表Account表前先将表中所有余额为0的记录全部更新为3.14的Statement Level触发器

create trigger before_insert_account

before insert on Account

for each statement

begin

update Account

set balance = 3.14

where balance = 0;

end;

Before触发器,在表中执行触发的插入、删除或更新操作之前触发,可以得到操作变动前的表状态,同时可以添加附加的操作将操作变动前的状态记录下来,来实现审计功能。例如:

— 创建一个用于将表Product每新增、修改、删除行的操作记录下来的到另外一个表Product_Operate的Before触发器

create trigger before_update_product

before insert or update or delete on Product

for each row

begin

insert into Product_Operate values (:old.product_id, :old.product_name, sysdate);

end;

After触发器,和Before触发器正好相反,也称作事后触发器,是在对表执行插入、删除、更新操作后触发,可以得到操作变动后的表状态,同时也可以添加附加的操作来更新和记录操作变动后的表状态。例如:

— 创建一个用于更新表Product每新增、修改、删除行的操作时间的After触发器

create trigger after_update_product

after insert or update or delete on Product

for each row

begin

update Product

set update_time = :new.update_time

where product_id = :new.product_id;

end;

Instead Of触发器,只能应用于视图中,这种触发器是按照视图的具体实现,即使外部不能直接操作视图,也可以通过Instead Of触发器实现视图被操作,并且与表关联起来,从而实现记录变动和更新数据库表的操作。例如:

— 创建一个用于将视图Product_View更新、插入和删除行时,对应更新表Product表的Instead Of触发器

create or replace trigger instead_of_view_product

instead of delete or update or insert on Product_View

for each row

begin

if deleting then

delete from Product

where product_id = :old.product_id;

elsif updating then

update Product

set product_name = :new.product_name

where product_id = :old.product_id;

elsif inserting then

insert into Product (product_id, product_name)

values (:new.product_id, :new.product_name);

end if;

end;

通过上面的解释可以很容易的理解Oracle的5种触发器类型,对于初学者来说,首先应该了解这几种触发器的区别,理解它们的各自的应用场景,然后做好结合实际应用来深入掌握。

总而言之,Oracle


数据运维技术 » 掌握Oracle触发器类型,实现数据库自动化管理(oracle触发器类型)