Oracle触发器是数据库系统中的一项强大工具,可以在表级和库级自动执行和实现一些任务。了解各类触发器,有助于开发者更有效地构建SQL语句。
首先介绍最常见的触发器类型——行触发器。此类触发器可以监视INSERT或UPDATE操作,在它们执行之前或之后立即执行某个操作。例如,创建一个名为instr_trig的行触发器,当更新技术类型iec_instr表中的某一个列时,需要把相关改动记录到log表中:
“`sql
create or replace trigger instr_trig
after update of type on iec_instr
for each row
begin
insert into log(type_old, type_new)
values (:old.type, :new.type);
end;
现在介绍第二种最常用的触发器——表触发器。此类触发器在指定表上执行插入,更新或删除等操作时创建,而不限于某行的变化。例如,创建一个名为error_trig的表触发器,如果在error表中插入时有异常发生,则将其记录到error_log表中:
```sql
create or replace trigger error_trig
before insert on error
for each row
begin
if :new.msg_type = 'error' then
insert into error_log(msg) values (:new.msg);
end if;
end;
此外,Oracle数据库还提供了另一种十分强大的触发器类型——数据库触发器,它可用于监控整个数据库的活动,并能在在重要数据库操作发生时发出信号。例如,创建一个名为db_trig的数据库触发器,监控登录事件,当用户登录数据库时弹框通知管理员:
“`sql
create or replace trigger db_trig
on database
after logon
begin
dbms_alert.signal(‘Logon’, user || ‘ has logged on’);
end;
每一种触发器都有由它独有的语法形式,掌握了这些触发器,可以更好地发挥它们的作用,从而充分利用SQL构建技能实现更多强大的效果。