详解Oracle触发器的五种类型(oracle触发器类型)
及其特点
Oracle触发器是对瞬时操作或特定表变化进行自动反应的一种数据库基础架构。它通常在有时间上的批处理任务时由数据库调用或发生某些特定的表操作时被触发。Oracle中有五中不同的触发器类型,分别是表触发器、DDL触发器、数据库触发器、系统触发器和框架触发器。这些触发器的特征也不同,决定了not only它们的使用有何不同的选择。
1.表触发器:表触发器在表上定义,并且在INSERT,UPDATE,DELETE操作发生时被激活。这些只能被DML触发,而且是基于某表的,可以用来更新特定行,构建日志表,验证表和其他类型表操作。
例如,如果你想要在一个表中插入了一行数据时向另一个表插入数据,你可以使用表触发器实现。
CREATE OR REPLACE TRIGGER trigger_name
AFTER INSERT ON table_name
FOR EACH ROW
BEGIN
INSERT INTO other_table (column_name)
VALUES (:new.column_name);
END;
/
2.DDL触发器:DDL触发器的精神是为数据库对象的改变而被触发,包括了create, ALTER, Drop, truncate and analyze等操作,通常用来跟踪DLL变化,实现记录维护功能等。
例如,如果你想要跟踪用户在数据库对对象进行CREATE 和 DROP 操作,你可以使用DDL触发器实现。
CREATE OR REPLACE TRIGGER etc_obj_log
AFTER CREATE OR DROP ON database
BEGIN
INSERT INTO etc_obj_log (action_type,action_user,action_table)
VALUES (ORA_DICT_OBJ_EVT.OCLE_EVT_DICT_OBJ_TYP, ORA_DICT_OBJ_EVT.OCLE_EVT_DICT_OBJ_NM ,SYSDATE);
END;
/
3. 数据库触发器:数据库触发器用于检测数据库的系统事件,这些事件可以是 Oracle 的行为(例如,一个session登录上数据库),也可以是系统级权限事件。这些触发器被存储在SYS用户中,它们不会因更新表或列来进行触发。
例如,如果你想要在Facebook登录时发送邮件,你可以使用数据库触发器实现。
CREATE OR REPLACE TRIGGER facebook_login_trigger
AFTER LOGON ON database
BEGIN
UTL_mail.send(sender => ‘@.com’,
recipients => ‘@.com’,
subject => ‘Facebook Login Info’,
message => ‘Facebook Login in Database!’);
END;
/
4. 系统触发器:系统触发器也称为调节触发器,类似于数据库触发器,但它们可以修改系统状态或行为。它们用于监控系统行为,比如,如果用户在数据库实例中的空间满了,系统触发器可以自动调整对象的大小等。
例如,如果你想要在用户操作完成时更改一个表的大小,你可以使用系统触发器实现。
CREATE OR REPLACE TRIGGER adjust_table
AFTER EVENT ” AFTER ALL OPERATION”
BEGIN
ALTER TABLE table_name RESIZE;
END;
/
5. 框架触发器:框架触发器非常灵活,它们允许你根据逻辑条件来创建通用触发器。它运行在DDL,DML和database事件上,可以检测到数据库实例中的某些事件,从而可以对实例中的某些操作进行响应。
例如,如果你想要监控数据库实例的操作,并在发生日志事件时发送邮件,你可以使用框架触发器实现。
CREATE OR REPLACE TRIGGER send_mail
AFTER EVENT “AFTER ANY OPERATION”
BEGIN
U