Oracle触发器:深入了解不同类型(oracle触发器类型)
Oracle触发器(Trigger)是一种特殊的数据库对象,用来在在数据库对象上定义一种行为,当特定的操作(DML)发生或特定表中数据改变时,它就会执行定义好的数据库操作。在数据库中,通常有四种类型的触发器:表触发器,行触发器,系统触发器和数据库事件触发器。
表触发器是表层次的触发器,它们是针对特定数据表的,可以在表上定义INSERT, UPDATE和DELETE操作。它们可以根据定义好的动作来设置前后的动作,比如某个字段值的修改。它们常用于逻辑有效性检查,实时记录日志,完成自动任务等。
例如,下面的表触发器可以用来更新表中一个字段的值:
create or replace trigger trig
before insert or update on Info
for each row
begin
:new.F1 := sysdate;
end;
/
行触发器可以应用于每行操作,它们可以检查每行是否满足特定的条件。典型的用途是在数据行插入,更新或删除时检查数据是否正确,以确保数据的完整性。
例如,下面的行触发器可以检查输入值是否在指定的范围内:
create or replace trigger trig
before insert or update on my_table
for each row
begin
IF :NEW.val NOT BETWEEN 0 AND 10 THEN
raise_application_error(-20000,’Val out of range’);
END IF;
end;
/
系统触发器是在数据库登录或者停止时执行的SQL语句,它们可以用来完成特定的工作,比如清除日志文件,启动其他应用程序或者创建附加数据库。
例如,下面的系统触发器可以在服务器登录时启动另外一个服务器:
create or replace trigger trig
after LOGON ON DATABASE
begin
execute immediate ‘startup ‘;
end;
/
数据库事件触发器可以定义在数据库或者操作系统层次上的“事件”,包括内存状态,I/O状态,网络状态等,当这些事件发生时,它们可以执行特定的动作。
例如,下面的数据库事件触发器可以在等待时间超过指定时间时启动特定的任务:
create or replace trigger trig
after logon on database
when (WAIT_TIME > 5)
begin
execute immediate ‘start store_index’
end;
/
总之,Oracle触发器是用来定义对数据库数据改变作出响应的功能,它们可以让我们实现更多的功能和任务,而无需人为的操作。