Oracle触发器(Triggers)是一种自动执行的在一个数据库中维护数据完整性、实施业务规则以及收集数据字典信息的数据库对象。它允许您定义在某些数据变化时,系统自动执行指定的动作。
Oracle触发器的功能有很多种,大致可以分为以下几类:
1. 行触发器(Row Triggers):触发器在表上的每个行上执行,比如插入、更新、删除操作都会触发行触发器。
例如:
CREATE OR REPLACE TRIGGER tr_emp_bi
BEFORE INSERT OR UPDATE ON emp
FOR EACH ROW
DECLARE
Begin
if :NEW.sal > 5000 then
:NEW.comm := :NEW.sal * 0.15;
else
:NEW.comm :=:NEW.sal * 0.10;
End If;
End;
/
又如:
CREATE OR REPLACE TRIGGER tr_emp_au
AFTER UPDATE ON emp
FOR EACH ROW
BEGIN
if :NEW.sal > 5000 then
:NEW.comm := :NEW.sal * 0.15;
else
:NEW.comm := :NEW.sal * 0.10;
End If;
End;
/
2. 表触发器(Table Triggers):这种触发器将表上所有操作视为一个单元,当对表上任何操作时,触发器就会被触发。
例如:
CREATE OR REPLACE TRIGGER tr_emp_bi
BEFORE INSERT OR UPDATE ON emp
DECLARE
BEGIN
UPDATE emp SET sal = sal * 1.2;
End;
/
又如:
CREATE OR REPLACE TRIGGER tr_emp_au
AFTER UPDATE ON emp
DECLARE
BEGIN
UPDATE emp SET sal = sal * 1.3;
End;
/
3. DDL触发器(DDL Triggers):这类触发器在数据库对象(如表、视图)被建立或删除时会被调用,可用来管理数据库物件或者实现安全性。
例如:
CREATE OR REPLACE TRIGGER tr_emp_ddl
AFTER DROP ON TABLE emp
DECLARE
BEGIN
INSERT INTO logs VALUES (‘table_emp is dropped!’);
End;
/
在Oracle数据库中,可在表、视图、序列等数据库对象上建立触发器,通过这种方式,可以把一些业务规则的执行任务交给数据库本身来完成,而不需要用户自己去编写应用程序,使得系统运行更加可靠,管理更加方便。