深入了解Oracle触发器类型及其使用(oracle触发器类型)

触发器在Oracle中是一种存储过程,它可以在表,游标或其他数据库对象上执行任务,而无需用户提供任何输入。Oracle的触发器主要有行级触发器、表级触发器、数据库级触发器、登录级触发器和系统级触发器。

行级触发器依赖于行的更新,是最常用的触发器的类型之一。行触发器可以在一个表上定义,它会在表上插入,更新或删除行时自动触发。行级触发器是最有用的Oracle触发器类型之一,它可以根据行变更来触发由用户定义的操作,如执行更新,插入,删除等操作。

例如:

CREATE OR REPLACE TRIGGER trg1

AFTER INSERT ON tab_emp

FOR EACH ROW

BEGIN

update tab_emp set salary=salary*1.1 where ename=:new.ename

END;

表级触发器将触发器定义在表上,然后在做任何DML操作时被触发。表级触发器的执行是在变更发生后的第一次才执行,也就是说,变更会被应用到数据库中,然后触发器才会被执行。

例如:

CREATE OR REPLACE TRIGGER trg2

AFTER INSERT OR UPDATE OR DELETE ON tab_emp

FOR EACH STATEMENT

BEGIN

update tab_emp set salary=salary*1.1

END;

数据库级触发器在服务器层面上触发,可以响应系统层面的变量及系统事件。数据库级触发器的功能是监测实例的状态,当实例上的某个条件被满足时,数据库级触发器中定义的行为就会被执行。

例如:

CREATE OR REPLACE TRIGGER trg3

AFTER STARTUP ON DATABASE

DECLARE

v_isaval NUMBER(1);

BEGIN

select count(*) into v_isaval

from tab_emp;

if v_isaval = 0 then

insert into tab_emp (ename,salary)

values (‘Tom’,2000);

end if;

END;

登录级触发器在用户登录角色发生变化,用户登录时触发,当用户登录角色发生变化时,它会被触发,使这个变化在session中生效。用户可以在每次登录之后执行定义好的语句。

例如:

CREATE OR REPLACE TRIGGER trg4

AFTER LOGON ON SCHEMA

DECLARE

v_isaval NUMBER(1);

BEGIN

select count(*) into v_isaval

from tab_emp;

if v_isaval = 0 then

insert into tab_emp (ename,salary)

values (‘Tom’,2000);

end if;

END;

最后,系统级触发器是在数据库架子启动,系统关闭时触发,它可以被用来获取系统变量,或者做一些系统级别的操作,比如持久化系统状态,保存系统性能统计信息,等等。

例如:

CREATE OR REPLACE TRIGGER trg5

BEFORE SHUTDOWN ON DATABASE

BEGIN

update tab_emp set salary=salary*1.1;

END;

总的来说,Oracle的触发器是一种用来提高数据库性能和数据一致性的重要功能,它可以根据行变更来触发由用户定义的行为,因此对于Oracle用户来说,深入了解不同类型的触发器及其使用,是非常必要的。


数据运维技术 » 深入了解Oracle触发器类型及其使用(oracle触发器类型)