Oracle触发器类型:深入剖析(oracle触发器类型)

Oracle 触发器是将一个或多个SQL语句作为一个单元的一类数据库对象,它通过应用特定的事件自动执行。Oracle 触发器在生产环境中被广泛使用,以辅助在存储过程与DIY程序中实现额外的数据库功能。

无论触发器的功能是复杂的还是简单的,了解触发器类型及其特性非常重要。Oracle提供了两种不同类型的触发器:表触发器和系统触发器,它们之间有许多相似之处,也有许多不同之处。

表触发器附加到表,然后监听来自表的DML事件。当DML语句对表的数据进行更改时,它将触发器激活,从而运行触发器中给定的查询。例如,下面的SQL脚本可以创建一个触发器,以检查任何示例数据库中更改customer表中`customer_status`列:

““

CREATE OR REPLACE TRIGGER trg_update_daterow

before update of customer_status on customer

FOR EACH ROW

DECLARE

BEGIN

UPDATE customer

SET date_row = SYSDATE

WHERE customer_id = :new.customer_id;

END;

/

““

而系统触发器监听来自Oracle实例的重新启动或Shutdown事件,然后激活给定的查询。例如,下面的SQL脚本可以创建“after startup”系统触发器,用于在数据库启动时调整配置参数:

““

CREATE OR REPLACE TRIGGER start_config_trigger

After startup on database

BEGIN

EXECUTE IMMEDIATE ‘alter system set log_archive_config=”dg_config” scope=both’;

EXECUTE IMMEDIATE ‘alter system set log_archive_dest_state_2=”enable” scope=both’;

END;

/

““

另外,触发器还可以以外部模式(external mode)运行,它允许创建自定义外部应用程序,监听指定的事件,然后运行指定的SQL脚本。外部触发器的工作模式需要创建一个DLL文件作为外部服务名(extproc),以解释器的方式加载触发器程序,XML文件定义存储过程名称及参数,以及一组的PL/SQL模块包装器,一般用于加载外部服务名。

以上是Oracle触发器的两种类型。尽管它们有许多不同之处,但总的来说,它们都允许用户监听特定类型的事件,在发生事件时运行指定的SQL查询。他们让用户可以实现更复杂的数据库功能,而不用再依赖存储过程和DIY程序。


数据运维技术 » Oracle触发器类型:深入剖析(oracle触发器类型)