Oracle数据库触发器类型探讨(oracle触发器类型)

Oracle数据库针对表,存储过程或包的操作都可以创建相应的触发器,触发器的作用是在表增删改时执行SQL语句,起到自动维护的作用,下面对Oracle数据库的触发器类型进行详细的探讨。

Oracle数据库可以创建的触发器类型有:Before触发器、After触发器、Instead of触发器以及Compound触发器。Before触发器,是在 INSERT,UPDATE,DELETE 状态码执行前执行;After触发器,是在 INSERT,UPDATE,DELETE 状态码执行后,触发器可以在之后对表的内容进行改变;Instead of触发器,它在视图或表的状态码执行时,执行一系列的程序;Compound触发器,可以为同一表的一次操作,定义多个触发器,可以利用它来完成复杂的功能处理,比如实现一些数据完整性验证。

假如要在状态码执行后,将更新的行记录插入到另一个表中,可以利用After触发器完成,代码如下:

“`sql

CREATE OR REPLACE TRIGGER培trigger_name

AFTER INSERT OR UPDATE OR DELETE ON table_name

FOR EACH ROW

BEGIN

INSERT INTO another_table (column1,column2…)

VALUES (:new.column1,:new.column2,…);

END;


Compound触发器在插入、更新或删除之后,必须同时执行多个触发器,例如:

```sql
CREATE OR REPLACE TRIGGER培trigger_name
AFTER INSERT OR UPDATE OR DELETE ON table_name
REFERENCING OLD AS o NEW AS n
FOR EACH ROW
BEGIN
//First trigger
INSERT INTO tb_first (column1,column2...) VALUES (:new.column1,:new.column2,...);
//Second trigger
INSERT INTO tb_second (column1,column2...) VALUES (:new.column1,:new.column2,...);
//Third trigger
UPDATE tb_third SET ...;
END;

In stead of触发器,它语句可以为VIEW或者Table操作提供一些补充:

“`sql

CREATE OR REPLACE TRIGGER trigger_name

INSTEAD OF INSERT OR UPDATE OR DELETE ON view_name

BEGIN

//triger

//Insert

IF INSERTING THEN

INSERT INTO table_name (column1,column2…)

VALUES (:new.column1,:new.column2,…);

END IF;

//UPDATE

IF UPDATING THEN

UPDATE table_name

SET …

WHERE …;

END IF;

//DELETE

IF DELETING THEN

DELETE FROM table_name

WHERE …;

END IF;

END;


通过上述探讨,可以看出Oracle数据库的触发器类型有Before触发器、After触发器、Instead of触发器以及Compound触发器,各有不同的用途,可以实现复杂的功能。

数据运维技术 » Oracle数据库触发器类型探讨(oracle触发器类型)