掌握Oracle触发器类型,灵活运用之道(oracle触发器类型)

Oracle触发器是在特定事件发生时自动执行指定命令的逻辑程序,可以大大提高数据库处理效率,也为更多应用程序提供了方便之处,是 Oracle 的一种重要功能。Oracle 触发器的掌握与运用是必须的技能,本文将全面介绍 Oracle 触发器的七种类型及其灵活的运用之道。

首先,迈向掌握 Oracle 触发器,要先了解它的类型。Oracle 触发器主要分为七种,分别是表级触发器(Before Trigger、After Trigger)、行级触发器(Before Trigger、After Trigger)、DDL 触发器(Validate Trigger)、系统触发器(System Trigger)、登录触发器(Logon Trigger)、异常处理触发器(Exception Trigger)和时间触发器(Time Trigger)。

其中,表级触发器主要用于监控整张表的插入、更新、删除操作,可以是当整张表的某些字段更新时做出提示操作,例如:

“`sql

create or replace trigger tri_test_trigger

before insert or delete or update on test_table

for each row

begin

if inserting

then

dbms_output.put_line(‘Inserting data into table test_table’);

end if;

if deleting

then

dbms_output.put_line(‘Deleting data from table test_table’);

end if;

if updating

then

dbms_output.put_line(‘Updating data in table test_table’);

end if;

end;


行级触发器是只在某一行发生变化时触发的,主要用于把一行数据变化带来的其它表的变化统一地处理,例如:
```sql
create or replace trigger tri_test_trigger
before insert or delete or update on test_table
for each row
begin
if inserting
then
insert into tab_test value(:new.id, :new.name);
end if;
if deleting
then
delete from tab_test where id = :old.id;
end if;
if updating
then
update tab_test set name=:new.name where id = :old.id;
end if;
end;

DDL触发器是针对数据定义语言(DDL)操作所触发,它能够在 DDL 操作发生之前或之后执行指定的命令,例如:

“`sql

create or replace trigger tri_test_trigger

before drop on test_table

begin

dbms_output.put_line(‘DROPING data in table test_table’);

end;


系统触发器是 Oracle 内部自动触发的,可以替数据库执行基础任务,例如初始化定义环境参数,检查并自动解决完整性约束错误等,例如:
```sql
create or replace trigger tri_test_trigger
before shutdown on database
begin
dbms_output.put_line('Database is shutting down');
end;

登录触发器只能监控账户的登录行为,当某个账户登录时,该触发器会触发,可以用来限制用户或分析用户操作,例如:

“`sql

create or replace trigger tri_login_trigger

AFTER logon on database

begin

dbms_output.put_line(‘User ‘ || v_username || ‘ is logining’);

end;


异常处理触发器主要是针对数据库程序运行出错时触发,可以把失败信息收集并处理,使得整个程序更加健壮,例如:
```sql
create or replace trigger tri_test_trigger
AFTER SERVERERROR on database
begin
dbms_output.put_line('error code = ' || v_error_code);
dbms_output.put_line('error message = ' || v_error_message);
end;

最后,时间触发器根据时间间隔和计数次数触发,可以定期执行预定任务,有效自动处理,例如:

“`sql

— 时间间隔

CREATE OR REPLACE TRIGGER tri_test_trigger

AFTER

LOGON ON DATABASE

BEGIN

DBMS_SCHEDULER.CREATE_JOB(

job_name => ‘JOB_TIME_INTERVAL’,

job_type => ‘PLSQL_BLOCK’,

job_action => ‘

BEGIN

INSERT INTO users

(name, password)

VALUES

(”admin”, ”admin”);

END;

‘,

comments => ‘test time interval job’,

start_date => systimestamp,

repeat_interval => ‘FREQ=MINUTELY;INTERVAL=5’);

END;


以上是 Oracle 触发器的七种主要

数据运维技术 » 掌握Oracle触发器类型,灵活运用之道(oracle触发器类型)