了解Oracle触发器的类型与用途(oracle触发器类型)
Oracle触发器是一段用来监测数据库行为并执行相应动作的SQL存储过程,可以用来提高或保持数据库性能,它可以在数据库表上设置联动性操作,下面介绍Oracle触发器的类型和用途。
Oracle触发器有4种类型:表触发器、DML触发器、系统触发器和进程触发器。
表触发器(Table Trigger)会在特定的表上运行,当发生插入、更新或删除操作时它就会被触发,一般用来执行审计或进行数据迁移。
比如下面的示例:
--Creating table triggers
CREATE OR REPLACE TRIGGER order_triggerAFTER INSERT ON orders
FOR EACH ROWBEGIN
INSERT INTO order_log(order_id, date_created, order_status)VALUES (:new.order_id, sysdatetime, 'NEW');
END;/
其中,order_trigger是触发器的名称,AFTER INSERT ON orders表明它会监测orders表的insert操作,当发生insert操作时,就会将新插入的id保存到order_log表中。
DML触发器(Data Manipulation Language Trigger)是基于DML(如INSERT,UPDATE,DELETE操作)的触发器,用于在数据库中的行的添加,更新或删除时对特定项进行处理,一般用于维护和保护数据库完整性。
比如下面的示例:
CREATE OR REPLACE TRIGGER update_status
AFTER UPDATE OF status ON ordersFOR EACH ROW
BEGIN IF :old.status'DELIVERED' && :new.status='DELIVERED' THEN
UPDATE order_log SET order_status = 'DELIVERED'
WHERE order_id = :new.order_id;END IF;
END;/
其中,update_status触发器会在status被更新时被触发,如果将status的值从不是’DELIVERED’变成’DELIVERED’,那么就把order_log表对应的状态更新为’DELIVERED’。
系统触发器(System Trigger)会在指定的数据库操作(如启动或停止)发生时被触发,一般用于将信息写入到访问日志中。
比如下面的示例:
CREATE OR REPLACE TRIGGER system_start
AFTER STARTUP ON DATABASE BEGIN
insert into log_db_oper (oper_time,oper_name)values (sysdate,'system_start');
END;/
上面这个触发器会在MYSQL启动时被触发,它会把一条记录写入到log_db_oper表中,记录当时的时间和操作名称(system_start)。
最后我们介绍的是进程触发器(Process Trigger),它会在某个进程停止时被触发,从而将完成的任务保存起来,它可以在不同会话中共享同一进程,一般用于在多会话中同步数据。
比如下面的示例:
CREATE OR REPLACE TRIGGER process_finish
AFTER FINISH ON PROCESS BEGIN
INSERT INTO process_log(pid, end_time,status)VALUES (current_process_id(),sysdatetime,'FINISH');
END;/
上面的触发器会在某个进程停止时被触发,它会将当时进程的ID和结束时间写入到process_log表中,以便进行后期的管理和统计。
总的来说,Oracle触发器的4种类型可以用来完成多种数据库操作,比如审计,维护数据完整性,记录操作日志,数据迁移等等,它可以提高生产力和数据库性能,可以为管理数据库提供极大的帮助。