深入理解Oracle的触发器类型(oracle触发器类型)

Oracle的触发器类型是一种能够根据特定事件执行指定操作的数据库对象,有三种类型:行触发器、表触发器和调度触发器。

行触发器是Oracle数据库中最常用的触发器类型,它可以在插入、更新或删除表行时被激活。行触发器受到约束,只能对字段类型为字符、日期和数值的列进行触发操作,不能触发对象或者对象类型:

例如创建一个行触发器,执行在INSERT操作时,如果数据库中的字段“emp_id”被赋值,则把“created_at”字段自动赋值当前时间:

CREATE OR REPLACE TRIGGER tr_test

AFTER INSERT ON employees

FOR EACH ROW

BEGIN

IF :NEW.emp_id IS NOT NULL THEN

:NEW.created_at := SYSDATE;

END IF;

END;

/

表触发器是一种满足特定条件时被激活的触发器,它可以在表上对操作执行前和操作执行后进行响应。般情况下,如果需要在插入、更新或删除表行时进行复杂数据处理,则需要使用表触发器,因为它可以让你在满足特定条件时执行特定操作。例如,下面的表触发器表明,如果插入一行到empolyees表,那么将会更新status字段值为“ACTIVE”:

CREATE OR REPLACE TRIGGER tr_test

BEFORE INSERT ON employees

BEGIN

:NEW.status := ‘ACTIVE’;

END;

/

调度触发器是一种Oracle数据库中特有的触发器,它可以根据指定的定时时间段,周期性调度并执行指定数据库操作。与其他触发器不同,调度触发器是从数据库计划中被调用,它不绑定任何表,也不能操纵表数据,仅用于处理不算重要的定型任务。

例如,下面的触发器会在每月的第一个礼拜四0点执行日志清理:

BEGIN

DBMS_SCHEDULER.CREATE_JOB (

job_name => ‘Cleanup_Log’,

job_type => ‘PLSQL_BLOCK’,

job_action => ‘BEGIN sys.dbms_system.cleanup_log; END;’,

repeat_interval => ‘freq=weekly; byday=thu; byhour=0’,

enabled => TRUE

);

END;

/

总结:Oracle的触发器类型有三种,即行触发器、表触发器和调度触发器,它们分别用于在插入、更新或删除表行时执行指定操作,根据表上的操作类型执行前和操作执行后进行响应,以及周期性调度并执行指定数据库操作。


数据运维技术 » 深入理解Oracle的触发器类型(oracle触发器类型)