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触发器类型之多,可以从多个层次灵活的使用,可以有效的驱动我们的数据库管理,以实现更精准的管理。


数据运维技术 » Oracle触发器类型—驱动你的数据库管理(oracle触发器类型)