触发器
什么是触发器?
触发器是一种过程,与表关系密切,用于保护表中的数据。当一个表被修改(insert、update或delete)时,触发器字动执行。触发器课实现多个表之间数据的一致性和完整性。
触发器的类型有3种:
DML触发器:Oracle可以在DML语句进行触发,可以在DML操作前或操作后进行触发,并且可以对每个行或语句操作上进行触发。
替代触发器:由于在Oracle里,不能直接对由两个以上的表建立的视图进行操作,所以给出了替代触发器。它就是Oracle 8专门为进行视图操作的一种处理方法。
系统触发器:Oracle从8i开始提供了第三种类型的触发器叫系统触发器。它可以在Oracle数据库系统的事件中进行触发,如Oracle系统的启动与关闭等。
创建DML触发器:
DML触发器由DML语句激发,并且由该语句的类型决定DML触发器的类型
可以定义DML触发器进行insert、update、delete操作
DML触发器可以在上述操作之前或之后激发,也可以在行或语句操作上激发
触发器的语法:
触发器的基本使用应用实例:
-- 当有员工的工资发生变化时,触发事件修改该员工对应的部门工资数据
create or replace trigger dept_sal_trigger
--触发的时机
after
--触发的事件
update or insert or delete on emp1
--把员工对应的部门工资进行修改
declare
cursor total_sal is select sum(sal) total_sal,deptno from emp1 group by deptno;
dept_s dept_sal%rowtype;
begin
-- delete from dept_sal;
for dept_s in total_sal loop
update dept_sal set total_sal=dept_s.total_sal where deptno=dept_s.deptno;
-- insert into dept_sal values(dept_s.deptno,dept_s.total_sal);
end loop;
-- 不要添加commit;
EXCEPTION
when OTHERS THEN rollback;
end;