精通Oracle触发器之各类型介绍(oracle触发器类型)

Oracle触发器是使用PL/SQL代码实现一些列表定义的条件和动作,以便在一个表上发生特定事件时自动地执行一个 particular action.触发器可以是用来实现数据库功能,如复制现行记录,实施约束,自动更新主外键和实施安全性的一种特别有用的结构。

Oracle触发器可以分为以下几类:

(1)Befor类型

该类触发器可以在DML(数据定义语言)操作发生前在表上定义,它非常有用,可以在插入,更新或删除表中的行时记录更改。例如:

“`sql

create or replace trigger before_update_trigger

before update of salary

on employees

for each row

begin

if NEW.salary

raise_application_error( -20500,

‘Salary cannot be reduced!’ );

end if;

end;

/

(2)After类型
该类触发器可以在表上定义,以便在DML(数据定义语言)操作发生后执行特定操作,它被称为“后续触发器” 。它与Before触发器的操作类似,只是它在行实际被更新或删除后才触发。例如:
```sql
create or replace trigger after_update_trigger
after update of salary
on employees
for each row
begin
if NEW.salary
dbms_output.put_line('Salaray has been decreased!');
end if;
end;
/

(3)Row类型

该类触发器在定义时可以表示为每一行会有多次触发,以便于拦截或验证数据的每一行影响。它可以被 Before或After 触发器调用。例如:

“`sql

create or replace trigger row_update_trigger

before or after update of salary

on employees

for each row

begin

update employees

set bonus_percentage = (NEW.salary * 0.1)

where id = NEW.id

end;

/

(4)Inser类型
Inser类型触发器可以在新行插入到数据库表之前或之后触发,因此它可以用来更新与新行有关的其他表中的内容。例如:
```sql
create or replace trigger insert_trigger
before insert on employees
for each row
begin
update employee_contacts
set contact_no=:NEW.contact_no
where id=:NEW.id;
end;
/

(5)Delete类型

Delete类型触发器可以在删除表中数据行之前或之后触发。它可以在行被删除之前或之后,在表中做一些处理。例如:

“`sql

create or replace trigger delete_trigger after delete on employees

for each row

begin

delete from employee_history

where id=:OLD.id;

end;

/


以上就是Oracle触发器各类型介绍,它们在实施约束和安全性等方面提供了特别有用的结构。

数据运维技术 » 精通Oracle触发器之各类型介绍(oracle触发器类型)