精通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 rowbegin
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触发器各类型介绍,它们在实施约束和安全性等方面提供了特别有用的结构。