掌握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