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程序。