Oracle触发器类型:一个深入解析(oracle触发器类型)

Oracle 触发器类型有很多,它们在数据处理和操作中发挥着重要作用。触发器类型的根据Oracle语句的不同,可以分为以下五类。

1. **立即触发器**:由事件触发,事件可能是表更新,数据库处理完毕等。此触发器支持两种指令,INSERT和UPDATE,用于让数据满足特定的要求之前操作,如进行某种计算,选择不符合标准的记录等。

例如:

CREATE OR REPLACE TRIGGER trig_test

BEFORE INSERT ON table_test

FOR EACH ROW

BEGIN

:new.column_a := ‘Test’;

END;

2. **综合触发器**:有多种条件触发,如由事件触发,但包括多种不同数据库操作,比如UPDATE和DELETE,并且有可能在触发当中修改更新字段和记录。可以把多个事件联合起来,比较常用。

例如:

CREATE OR REPLACE TRIGGER trig_test

BEFORE INSERT OR UPDATE ON table_test

FOR EACH ROW

BEGIN

:new.column_a := ‘Test’;

END;

3. **后台触发器**:该类型的触发器可以作为一个独立的生成进程运行,可以让任务在数据库中运行,该任务可以作为一个进程运行,优先级可以设定,并且同时多道任务可以运行,因此适用于批量操作,处理数据下载等。

例如:

CREATE OR REPLACE PROCEDURE trigger_task AS

BEGIN

— Trigger Codes

END;

CREATE OR REPLACE TRIGGER trig_test

AFTER STARTUP ON DATABASE

BEGIN

— Run the job

DBMS_SCHEDULER.run_job(‘TRIGGER_TASK’, FALSE, EMPTY_BLOB());

END;

4. **时间触发器**:这是一种特殊的触发器,在指定的时间段内运行,比如每周固定的时间段,可以用来做定期的备份,或者定期的更新数据库任务。

例如:

CREATE OR REPLACE PROCEDURE trigger_task AS

BEGIN

— Trigger Codes

END;

BEGIN

DBMS_SCHEDULER.create_job(

job_name => ‘TRIGGER_TASK’,

job_type => ‘PLSQL_BLOCK’,

job_action => ‘trigger_task’,

repeat_interval => ‘FREQ=WEEKLY;BYDAY=FRI;BYHOUR=13;BYMINUTE=30’,

comments => ‘Perform trigger every Friday at 13:30’,

enabled => true

);

END;

5. **批处理触发器**:可以在收到每一批次请求时执行,其基本操作并不是对单一记录操作,而是跨行操作,比如DML,或者跨会话的操作等,特别的适合量太大的操作。

例如:

CREATE OR REPLACE PROCEDURE trigger_task AS

BEGIN

— Trigger Codes

END;

BEGIN

DBMS_SCHEDULER.create_job(

job_name => ‘TRIGGER_TASK’,

job_type => ‘PLSQL_BLOCK’,

job_action => ‘trigger_task’,

start_date => SYSTIMESTAMP,

repeat_interval => ‘FREQ=MINUTELY;INTERVAL=15’,

comments => ‘Perform trigger every 15 minutes’,

enabled => true

);

END;

以上就是Oracle触发器类型,它们在数据处理和操作中起到重要作用。每种类型都有其特定的用处,只要根据实际情况选择正确的类型,就可以更有效率的处理数据。


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