掌握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_triggerbefore 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_triggerbefore 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_triggerAFTER 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 触发器的七种主要