Oracle触发器类型—驱动你的数据库管理(oracle触发器类型)
Oracle触发器(Trigger)是Oracle数据库中一种被用来约束特定操作的功能,它可以检测某种条件发生,从而驱动响应事件或者应用操作。触发器最常用于轻量级行级权限和实施其它管理任务,它也可以用来实现操作的行为自动化,从而更好的管理Oracle数据库的内部结构。
Oracle触发器类型以及使用条件多种多样,其中包括:表触发器、字典触发器、数据字典触发器、功能触发器和事件触发器等等。
表触发器用于当某种情况出现时,自动改变表中的行。比如说,当删除表中的某一行时,表触发器就会被激活,触发一段PL/SQL代码来更新从表中的某一行,从而确保从表的完整性和一致性:
create or replace trigger trg_update_child2
before delete on parent2
for each row
begin
update child2 set parentcol2 = null
where parentcol2 = :old.keycol;
end;
字典触发器主要用于捕获字典对象的变化,当字典对象发生变化时,比如说增加、删除或者改写某个表或者索引时,就会自动触发一段PL/SQL:
create or replace trigger trg_dict_log
after create on database
Declare
v_action VARCHAR2(60);
Begin
IF (ORA_DICT_OBJ_TYPE =’TABLE’) THEN
v_action := ‘Table Created’;
ELSIF(ORA_DICT_OBJ_TYPE=’INDEX’) THEN
v_action := ‘Index Created’;
ELSE
v_action := ‘Other Object Created’;
END IF;
–将变化记录到日志表中
INSERT INTO table_log
(action, object_name, object_type, timestamp)
VALUES
(v_action,ora_dict_obj_name,ora_dict_obj_type,sysdate);
END;
数据字典触发器与字典触发器类似,不同的是它用来监控数据字典中的对象变化,比如模式中的表或者索引,当模式中的表或者索引发生变化时,就会触发一段PL/SQL代码,例如:
CREATE OR REPLACE TRIGGER trg_on_drop
AFTER DROP ON schema
BEGIN
s_message := ‘Table ‘|| ORA_DICT_OBJ_NAME ||’ has been dropped from ‘|| ORA_SYSEVENT;
INSERT INTO Log_Table
(obj_name, message, timestamp)
VALUES
(ORA_DICT_OBJ_NAME, s_message, sysdate);
END;
功能触发器用途很广,它可以实现多种功能,比如,当一种特定条件发生时,触发一种操作,或者当数据发生变化时,触发一段PL/SQL代码,使其起到自动化的作用,下面是一个例子:
CREATE OR REPLACE TRIGGER trg_after_user_create
AFTER CREATE ON User
BEGIN
INSERT INTO logs
(user_name, message, timestamp)
VALUES
(name, ‘User Created’, systimestamp);
END;
事件触发器是Oracle数据库在特定事件发生时执行一段PL/SQL代码,这也是最为常用的Oracle触发器之一,它可以用在各个方面,例如,当有新数据插入到某张表时,就会触发一段PL/SQL代码,或者当维护一个全局变量时,也会触发一段PL/SQL代码。
总之,Oracle触发器类型之多,可以从多个层次灵活的使用,可以有效的驱动我们的数据库管理,以实现更精准的管理。