深入理解Oracle触发器的类型和功能(oracle触发器类型)
Oracle触发器是与表或视图相关的特殊存储过程,它由数据库引擎在一个操作发生时自动触发执行,其主要功能是在特定事件发生时反应,以处理数据库表中的数据。Oracle触发器有三种类型:行触发器、表级定义触发器以及系统定义触发器。下面我将深入理解Oracle触发器的每一种类型,以及它们的功能。
首先,行触发器在表的每一行上运行,它只处理由插入或更新操作影响的行,可以声明为与 INSERT、UPDATE 或 DELETE 语句相关联。例如一个更新一个表中所有人员薪水信息的行触发器可以定义如下,自动更新每个更新操作后的表中记录:
CREATE TRIGGER upd_ga_salary
AFTER UPDATE OF g_salary
ON GA_emplyee
BEGIN
UPDATE GA_emplyee
SET avg_salary = (g_salary + p_salary) / 2
WHERE emp_no = :old.emp_no;
END;
其次,表级触发器是在更新和删除操作影响的表上运行,它只处理一整张表。此类创建的表级触发器通常用于删除表中的数据,在 DELETE 语句删除表中的行之前,用于将记录从一个历史表拷贝到另一个历史表:
CREATE TRIGGER del_ga_hist BEFORE DELETE
ON GA_emplyee
BEGIN
INSERT INTO ga_emplyee_hist
SELECT *
FROM deleted;
END;
最后,系统定义触发器是由 Oracle 数据库自身生成的触发器,通常用于维护 DBMS_STATS。例如,在更新聚集索引的块的时候,Oracle 将自动触发一个系统定义触发器,以重新计算索引的统计信息:
CREATE OR REPLACE TRIGGER GATHER_STATS_TRG
AFTER INSERT
ORUPDATEORDELETEON emp
DECLARE
BEGIN
DBMS_STATS.gather_index_stats(‘SALES’, ‘SALES_IDX’);
END;
总的来说,Oracle 触发器是一种特殊的存储过程,它在事件发生时自动触发执行,用于处理数据库表中的数据。Oracle触发器有三种类型:行触发器、表级定义触发器以及系统定义触发器,各有其独特的功能。在生产环境中,应慎重使用触发器,否则容易产生奇怪的错误。