触发器的基本操作
创建触发器
在创建触发器时,必须指定触发器的执行时间和触发事件,创建触发器的语法如下(在EMP表中删除记录后触发):
create or replace trigger emp_count
after delete on emp
declare
cou integer;
begin
select count(*) into cou from emp;
dbms_output.put_line('现在还剩'||cou||'条数据');
end;
查看触发器
创建成功的触发器存放在数据库中,与触发器有关的数据字典有:USER_TRIGGER、ALL_TRIGGER和DBA_TRIGGER等。其中,USER_TRIGGER存放当前用户的所有触发器,ALL_TRIGGER存放当前用户可以访问的所有触发器,DBA_TRIGGER存放数据库中的所有触发器。下面查看当前用户的所有触发器,示例如下:
select * from user_triggers;
修改触发器
修改触发器,只能通过带有or replace选项的create trigger语句重建。而ALTER TRIGGER语句则用来启用或禁止触发器
改变触发器的状态
触发器有ENABLED(有效)和DISABLE(无效)两种状态。新建的触发器默认是ENABLED状态。启用和禁用触发器的语句是ALTER TRIGGER,其语法如下:
alter trigger trigger_name enabled|disabled
如果使一个表上的所有触发器都有效或无效,可以使用下面的语句:
alter table table_name enabled all triggers;
alter table table_name enabled all triggers;
删除触发器
删除触发器的语法如下:
drop trigger trigger_name;
删除触发器和删除过程或函数不同,过程或函数没有与使用到的数据库对象关联。如果删除过程或函数所使用到的表,那么过程或函数被标记为INVAID状态,仍存在于数据库中。如果删除创建触发器的表或视图,那么也将删除这个触发器。
语句触发器
语句触发器是指当执行DML语句时被隐含执行的触发器。如果在表上针对某种DML操作建立了语句触发器,那么当执行DML操作时会自动执行触发器的相应代码。
建立BEFORE语句触发器
为了确保DML操作在正常情况下进行,可以基于DML操作建立BEFORE语句触发器。例如,为了禁止工作人员在休息日改变雇员信息,开发人员可以建立BEFORE语句触发器,以实现数据的安全保护。示例如下:
create or replace trigger tr_sec_emp
before insert or update or delete on emp
begin
if to_char(sy