Oracle数据库的触发器类型及应用(oracle触发器类型)

Oracle 是一款功能强大的关系数据库,它具有多种数据库特性,其中之一是提供6种不同类型的触发器,均可以用来自动完成数据库表中更新或插入操作后需要执行的其它操作。

触发器可简单地定义为一种特殊的存储过程,它在我们对表的某个数据行的更新、删除或插入操作后,能自动地触发执行一个或多个指定的操作,帮助我们实现数据完整性、安全性。

Oracle数据库中支持6种类型的触发器:

1. 行级触发器(Row Level Trigger),该类型触发器每一行受到影响时,触发器就会执行。下面是一个简单的行级触发器示例:

“` sql

create or replace

trigger MyRowTrigger

before insert or update on MyTable

for each row

begin

if :new.SALARY > 10000

then

:new.SALARY := 9999;

end if;

end;


2. 表级触发器(Statement Level Trigger),该类型触发器在满足特定条件时,触发器就会执行。 下面是一个简单的表级触发器示例:

``` sql
create or replace
trigger MyTableTrigger
before insert or update on MyTable
begin
if :new.SALARY > 10000
then
:new.SALARY := 9999;
end if;
end;

3. 记录触发器(Logon Trigger), 当用户成功登录数据库时,触发器就会被执行

“` sql

create or replace trigger login_trigger

after logon on database`

begin

if(sys_context(‘userenv’,’default_schema’) != ‘scott’) then

execute immediate ‘alter session set current_schema=scott’;

end if:

end;


4. 登出触发器(Logoff Trigger),当用户登出数据库时,触发器就会执行

``` sql
create or replace trigger logoff_trigger
after logoff on database
begin
insert into audit_log
values ('user ' || sys_context('userenv','sid') ||
'logged off at ' || to_char(sysdate, 'yyyyMMddhh24miss'));
end;

5. 性能触发器(Performance Trigger),当数据库在某种情况下出现性能问题时,触发器就会执行

“` sql

CREATE OR REPLACETRIGGER MyPerfTrigger

AFTER LOGON ON DATABASE

BEGIN

IF SYS_CONTEXT(‘userenv’,’db_name’)=’PROD’ THEN

EXECUTE IMMEDIATE ‘ALTER SESSION SET events ”10046 trace name context forever, level 12”’;

END IF;

END;


6. DDL触发器(DDL Trigger),该触发器在某种DDL语言被执行时,触发器就会执行

``` sql
CREATE OR REPLACE TRIGGER ddl_trigger
AFTER CREATE ON DATABASE
BEGIN
DBMS_OUTPUT.PUT_LINE('CREATE TRIGGER DDL_TRIGGER FIRED');
END;

从功能上来看,Oracle数据库中不同类型的触发器都可以用来实现对数据库表的自动审计,更新或插入等数据库表操作后实施后续任务操作,有效实现数据的完整性和安全性。


数据运维技术 » Oracle数据库的触发器类型及应用(oracle触发器类型)