Oracle触发器:多种类型的实现方式(oracle触发器类型)
Oracle触发器是一种基于Oracle数据库的PL/SQL代码块,可以在数据库表中实现自动执行某些操作。Oracle触发器是针对特定表中特定操作自动调用一系列PL/SQL代码块。Oracle触发器可以在一行或多行发生更改,或者一些操作发生在表上时自动执行。
Oracle触发器具有四种主要类型:行级触发器、表级触发器、级联触发器和元数据触发器。
1. 行级触发器
行级触发器是在某些特定操作发生在表的某一行对象上时,自动执行某些操作的SELECT,INSERT,UPDATE 和DELETE操作。例如,当用户根据某些表字段执行UPDATE或DELETE操作时,在该操作之前,自动调用指定的触发器定义,以执行指定的操作。代码示例如下:
CREATE OR REPLACE TRIGGER update_sal
BEFORE UPDATE ON emp FOR EACH ROW
BEGIN :NEW.SAL := :OLD.SAL * 1.10;
END;/
2. 表级触发器
表级触发器是在对数据表执行特定操作时,自动执行某些操作。它与行级触发器相似,但它不用于具体的表行。当更新、插入、删除操作发生在整个表上时,它会自动调用指定的触发器定义,以实现某些操作。代码示例如下:
CREATE OR REPLACE TRIGGER tab_update_sal
AFTER UPDATE ON emp BEGIN
UPDATE emp SET SAL= SAL * 1.10;END;
/
3. 级联触发器
级联触发器可以同时引发多个表级触发器,即使在单个操作(INSERT, DELETE或UPDATE)上执行多个操作时也会被引发。级联触发器可以用来表达多个表之间的相互依赖关系。代码示例如下:
CREATE OR REPLACE TRIGGER cascade
AFTER UPDATE ON emp BEGIN
IF (:OLD.JOB_ID !=:NEW.JOB_ID) THEN UPDATE emp SET SAL= SAL * 1.10 WHERE EMPNO = :NEW.EMPNO;
UPDATE jobhist SET END_TIME = SYSDATE WHERE EMPNO = :NEW.EMPNO
AND END_TIME IS NULL; END IF;
END;/
4. 元数据触发器
元数据触发器是指在表本身的DML操作(插入、删除或更新)之外,数据库本身的结构发生更改时,Oracle触发器可以执行一系列操作。元数据触发器将被系统表视图上的活动触发,并自动执行。代码示例如下:
CREATE OR REPLACE TRIGGER metadata_sal
AFTER CREATE ON TABLE empBEGIN
IF (:NEW.JOB_ID='MANAGER') THEN INSERT INTO jobhist VALUES (:NEW.EMPNO, SYSDATE);
END IF;END;
/
总之,Oracle触发器是一种常用的数据库编程手段,用于实现在具体表行、整个表或数据库元数据上的自动执行操作。它提供了行级触发器、表级触发器、级联触发器和元数据触发器四种基本实现方式,用以实现对数据库的自动化控制和操作管理。