深入理解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的触发器类型有三种,即行触发器、表触发器和调度触发器,它们分别用于在插入、更新或删除表行时执行指定操作,根据表上的操作类型执行前和操作执行后进行响应,以及周期性调度并执行指定数据库操作。