Oracle 触发器是一种非常有用的数据库对象,它允许在表,视图或者数据库级别触发,在某些数据发生改变时,执行某种操作。与存储过程类似,触发器可以实现自定义的逻辑功能。
Oracle 支持 4 种主要的触发器类型,它们的行为也有所不同:
– BEFORE修饰的触发器(BEFORE Trigger)
BEFORE 触发器发生在更新操作但在执行更新操作之前,也就是说,如果BEFORE触发器发现某个错误,它可以处理并阻止实际的UPDATE语句。此外,BEFORE触发器还可以检查新值,然后将新值传递给表中的列。语法如下:
“`SQL
create or replace trigger Name
before insert or update or delete
on Table
for each row
begin
–Trigger code here
end;
- AFTER 修饰的触发器(AFTER Trigger)
AFTER 触发器发生在更新操作完成后,也就是说,AFTER触发器不能终止或阻止UPDATE语句,它只能记录数据库变化。语法如下:
```SQL
create or replace trigger Name
after insert or update or delete
on Table
for each row
begin
--Trigger code here
end;
– INSTEAD OF 修饰的触发器(INSTEAD OF Trigger)
INSTEAD OF触发器不是依赖表的更新,也就是select和insert语句被执行之前生成触发,而不需要修改语句。INSTEAD OF触发器一般用在视图上。语法如下:
“`SQL
create or replace trigger Name
instead of insert or update or delete
on View
for each row
begin
–Trigger code here
end;
- COMBINED 修饰的触发器(COMBINED Trigger)
COMBINED触发器可以支持BEFORE和AFTER触发器语句,可以将这两种触发器类型合并到一个触发器中去,在有些情况下可以提高代码复用。语法如下:
```SQL
create or replace trigger Name
before insert or update or delete
on Table
for each row
begin
--Before trigger code here
end;
begin
--After trigger code here
end;
在使用Oracle的触发器时,必须明确每种触发器的类型,并要明确它们的使用方式,以及为实现自定义功能所选择的触发器类型。