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