深入理解 Oracle 触发器类型(oracle触发器类型)
Oracle触发器是一种特殊的程序,它基于表和视图的操作自动执行。它可以在表后台强制执行一个或多个SQL语句或PL/SQL数据库块,以增强应用程序的功能。触发器的特点是,它可以在每次修改表视图数据时自动执行,即时无需程序员的参与就可以满足用户的需求。Oracle触发器的类型主要有以下几种。
1.行级触发器:它可以在数据库表中每次发生 INSERT、UPDATE、DELETE 操作时触发。比如:假定要在表EMPLOYEE中插入一行新数据时,把这一行数据添加到另一个表中,可以创建一个行级触发器:
CREATE OR REPLACE TRIGGER Trg_EMP_Ins
AFTER INSERT ON EMPLOYEE
FOR EACH ROW
BEGIN
INSERT INTO ANOTHER_TABLE
SELECT * FROM EMPLOYEE
WHERE EMPLOYEE.E_ID = :NEW.E_ID;
END;
2.表级触发器:它可以针对整张表作用,它会在整张表中批量插入、修改或删除数据时执行。比如:在表EMPLOYEE中把所有薪水相加,可以创建表级触发器:
CREATE OR REPLACE TRIGGER Trg_Sum_EMP
AFTER INSERT OR UPDATE OR DELETE
ON SALARY
FOR EACH STATEMENT
DECLARE
SUM NUMBER (8,2);
BEGIN
SELECT SUM (SALARY) INTO SUM FROM EMPLOYEE;
END;
3.维护性触发器:这个触发器可以应用在Oracle中的索引、视图或约束上,它可以在修改这些对象时被触发,以动态的更新索引、视图或约束。比如:在表EMPLOYEE中修改约束时,可以创建维护性触发器:
CREATE OR REPLACE TRIGGER Trg_emp_alter
AFTER ALTER ON EMPLOYEE
BEGIN
EXECUTE IMMEDIATE “ALTER TABLE EMP_TABLE ADD(AGE NUMBER (2))”;
END;
4. 综合触发器:综合触发器在表或视图上定义,可以应用在某种情况下多种DML操作。它可以让你在一次操作之后执行多个操作,而不是在多次操作之后执行单个操作。比如:要在表EMPLOYEE中更新数据,同时在另一个表中插入一条数据,可以创建一个综合触发器:
CREATE OR REPLACE TRIGGER Trg_emp_update
AFTER INSERT OR UPDATE OR DELETE
ON EMPLOYEE
FOR EACH ROW
BEGIN
UPDATE ANOTHER_TABLE
SET FIELD1 = :NEW.FIELD1,
FIELD2 = :NEW.FIELD2;
INSERT INTO ANOTHER_TABLE
SELECT * FROM EMPLOYEE
WHERE EMPLOYEE.E_ID = :NEW.E_ID;
END;
除了上述的以上几种类型,Oracle还提供了其他几种触发器,比如系统触发器之类。Oracle 的触发器功能可以极大提高程序的可维护性,只需根据应用程序的具体需要,灵活使用即可。