深入了解Oracle触发器不同类型(oracle触发器类型)
Oracle触发器是Oracle数据库应用程序编程技术的一部分,它允许用户定义在一个或多个表上执行一个或多个操作的程序单元。它们可以使用会话范围内可用的任何存储过程,视图或函数。根据Oracle触发器类型不同,具有不同的发动机。让我们看看Oracle触发器的几种不同类型。
第一种类型是Row-level触发器,它是在表中每一行操作发生时触发的。它可以用来控制某些行的操作,例如插入,更新或删除,以及发生在表中上述操作之前或之后发生的行级事件。例如:
CREATE OR REPLACE TRIGGER tgr_row AFTER INSERT OR UPDATE OR DELETE ON Table_name FOR EACH ROW DECLARE –Declare Variables –add code to perform row related events BEGIN –check values in inserted or updated row IF ( :NEW.salary > 80000 ) THEN INSERT INTO high_salary VALUES ( :NEW.empID, :NEW.Ename, :NEW.Sal )END IF; — Another statements END;
第二种类型是Statement-level触发器,它是在表上每一个SQL语句发生时触发的。它们使用事务控制,可以用来筛选传递给表的每一行的非行子集。例如:
CREATE OR REPLACE TRIGGER tgr_statement BEFORE INSERT OR UPDATE OR DELETE ON Table_name DECLARE — Declare Variables — add code to perform statement related event BEGIN –check values in inserted, updated or deleted rows IF ( (:NEW.salary > 200000 AND :OLD.salary 80000) ) THEN INSERT INTO high_salary VALUES ( :NEW.EMPID, :NEW.Ename, :NEW.Sal ) END IF; — Other statements END;
第三种是INSTEAD OF触发器,它可以在定义视图时使用。它们可以替换表上实际定义的操作,例如插入,更新或删除,触发器操作由代码定义。例如:
CREATE OR REPLACE TRIGGER tgr_insteadof AFTER INSERT OR UPDATE OR DELETE ON Table_name INSTEAD OF — define instead of trigger code BEGIN –add code to perform instead of related events INSERT INTO log_table VALUES ( :OLD.EMPNO, :OLD.ENAME, :NEW.SAL ); –Other statements END;
最后,还有一种叫做Compound触发器,它是多个触发器按顺序触发的组合触发器。它允许多个触发器针对同一表的操作被同时触发。例如:
CREATE OR REPLACE TRIGGER tgr_compound FOR INSERT ON Table_name COMPELETE BEGIN NULL; END; CREATE OR REPLACE TRIGGER tgr_compound_1 FOR INSERT ON Table_name REFERENCING NEW AS NEW OLD AS OLD BEGIN — code for insert operation END; CREATE OR REPLACE TRIGGER tgr_compound_2 FOR UPDATE ON Table_name REFERENCING NEW AS NEW OLD AS OLD BEGIN — code for update operation END;
总结:Oracle触发器类型有Row-level,Statement-level,INSTEAD OF和Compound类型,使用触发器可以很方便地控制表的操作,而不需要写复杂的编程代码。尽管它们的功能有所不同,但总的来说,它们都是为了帮助用户能够更好地使用Oracle数据库,实现其系统需要的目标对象。