深入探索Oracle触发器:完整的触发器类型(oracle触发器类型)
Oracle触发器是Oracle数据库中常用的数据库开发工具,它可以自动执行复杂的查询、代码和逻辑过程。它能:
(1)跟踪特定的表或表中的每个行,在发生变化时立即响应;
(2)执行路由程序,在特定类型的事件发生时自动做出响应;
(3)在Oracle系统中定义关联,当符合特定条件时自动启动程序;
(4)批量处理调用,更新一组行的数据。
Oracle触发器有四种类型:BEFORE触发器、AFTER触发器、INSTEAD OF触发器和级联触发器。
BEFORE触发器是Oracle触发器中最常用的类型,它能在INSERT、UPDATE或DELETE操作发生前调用一个存储过程或函数。它执行的操作可能包括:禁止操作;执行与被操作表相关联的其它操作;在某些条件下可禁止用户访问表;在整个表内构建变更行。例如:
CREATE OR REPLACE TRIGGER table1_before_trig
BEFORE INSERT OR UPDATE OR DELETE ON table1 FOR EACH ROW
BEGIN IF( new.column1 = 10) THEN
RAISE_APPLICATION_ERROR(-20001,'column1 shouldn''t be equals 10'); END IF;
END;
AFTER触发器能在INSERT、UPDATE或DELETE操作发生后调用一个存储过程或函数。例如:
CREATE OR REPLACE TRIGGER table1_after_trig
AFTER INSERT OR UPDATE OR DELETE ON table1 FOR EACH ROW
BEGIN IF( :old.column1 :new.column1) THEN
INSERT INTO table2 VALUE( :old.column1 , :new.column1 ); END IF;
END;
INSTEAD OF触发器多用于视图,它能拦截包括INSERT、UPDATE和DELETE在内的所有操作,并把拦截的结果转向指定的存储过程或函数。例如:
CREATE OR REPLACE TRIGGER table1_instead_trig
INSTEAD OF INSERT OR UPDATE OR DELETE ON view1 BEGIN
IF INSERTING THEN INSERT INTO table1 VALUES(new.column1 , new.column2) ;
END IF; IF UPDATING THEN
UPDATE table1 SET column1=new.column1 , column2=new.column2 ; END IF;
IF DELETING THEN DELETE FROM table1 WHERE column1=old.column1 ;
END IF; END;
最后一种类型级联触发器,在表之间的关联不足以实现所有需求时使用。级联触发器可使前面的某个触发器调用新的一组触发器,会受到这个新触发器的影响,反之亦然。通过级联触发器,更复杂的关联可以更加容易地在Oracle系统中进行实现。
以上就是Oracle触发器的四种完整的触发器类型。每种触发器的特点都不一样,对于每一种表操作,用户可以根据实际需求选择合适的触发器做出响应,从而更好地完成需求。