掌握Oracle触发器类型,提升数据库性能(oracle触发器类型)
Oracle触发器(Trigger)可以实现在表中的特定行中执行一组操作。它常被用来实现数据的完整性检查,审计,日志等。Oracle触发器大体上可以分为两类:Row Level Trigger(行级触发器)和Statement Level Trigger(语句级触发器)。
Row Level Trigger(行级触发器)会触发对数据库中某一行记录的某种操作(insert、update、delete)。它会受限于查询本身,不会批量操作行数据。在一个触发器中,IF(condition)THEN 中的条件语句会针对每一行操作,从而可以控制子程序实例,从而实现条件的限制。
下面是一个简单的例子:
create or replace trigger emp_trigger
before insert on emp for each row
begin if :new.sal > 3000 then
:new.empno := :new.empno + 10; end if;
end;
上述行级触发器在插入新行时,如果sal字段大于3000,则会把empno字段值添加10.
Statement Level Trigger(语句级触发器)会触发某个DDL或DML操作语句。它会把整个操作作为一个整体来看待,不会受限于查询本身而把IF和THEN,ELSE个别处理。如果DML操作条件很复杂,对各种行列数据都有要求,则最好使用语句级触发器来处理。
下面是一个简单的例子:
create or replace trigger emp_trigger
before delete or update on empbegin
if old.sal dbms_output.put_line('Employee salary cannot be increased!');
raise_application_error(-20000,'Employee salary is non-negotiable'); end if;
end;
上述语句级触发器在删除或更新行时,如果sal字段值大于原始值,则会引发程序错误,阻止员工工资被提高。
正确掌握Oracle触发器类型可以提升数据库性能,而且从语句层面上实现数据库完整性,让系统可控性更强。将行级触发器用于审查和日志记录,将语句级触发器用于实现业务级别的复杂逻辑,都能有有助于实现性能更高、可扩展性更强的系统。