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触发器在插入、更新或删除之后,必须同时执行多个触发器,例如:
```sqlCREATE 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触发器,各有不同的用途,可以实现复杂的功能。