深入了解Oracle触发器的类型及其用途(oracle触发器类型)
Oracle触发器(Triggers)是Oracle中功能最强大的特性之一,使得数据库管理员或开发人员能够实现某些自动化任务,其本质是根据用户定义的条件来执行用户定义的动作。Oracle触发器主要有三种:行级触发器、表级触发器和系统级触发器。
行级触发器是最常用的一种触发器,用户可以指定某行或某行下所有行上的触发器,行触发器执行时,它会检查其父表中提交(commit)或取消(rollback)操作之前每行发生的更改,然后决定是否触发规则。这也就是行级触发器的适用场景:要对每行都采取同样的操作,比如每行的记录日志的等。用户可以在行级触发器中使用以下Oracle系统变量::new和:old,前者用于访问被提交的新行的值(是一个字典),而后者用于访问被提交的旧行的值(也是一个字典)。例如:
“`sql
create trigger tr_insert_stud
before insert on students
for each row
begin
if :new.age>18 then
:new.name := ‘adult’;
else
:new.name := ‘teenager’;
end if;
end;
表级触发器是Oracle提供的另一种类型的触发器,它与行级触发器非常不同,表级触发器并不会检测表的某一行的变化,而是在表上的某一操作后发生(比如更新表,删除表),而且它只会被触发一次,无论操作的行数有多少。用户可以在表级触发器中使用:new和:old这两个参数,只是它们不是字典,只能查询操作完成后其作用范围内的所有行中的值。例如:
```sqlcreate or replace trigger tr_stud_update
after update on students begin
if :old.name!= :new.name then insert into log_table the_time,old_name,new_name values(sysdate,:old.name,:new.name);
end if;end;
最后,还有一种系统级触发器,这种触发器在数据库开启、关闭时触发,主要是数据库受到黑客攻击时,可以帮助用户实现前期预防。例如重置用户的密码:
“`sql
create trigger tr_db_shut
after shutdown on database
begin
update sys_user set password=’123456′;
end;
总之,Oracle提供了三种类型的触发器,用户可以根据自己的实际情况,来选择合适的触发器来完成具体的功能。