PL/SQL程序设计--学习笔记8--触发器

八、触发器
触发器在数据库中以独立的对象存储,它与存储过程不同的是,存储过程通过其他程序来启动运行或直接启动运行,而触发器是由一个事件来启动运行。即触发器是当某个事件发生时自动隐式运行。并且,触发器不能接收参数。所以运行触发器就叫触发或点火(firing)。oracle事件指的是对数据库的表进行insert、update及delete操作或对视图进行类似的操作。oracle将触发的功能扩展到了触发oracle,如数据库的启动与关闭等。
触发器的组成:触发事件;触发时间;触发器本身;触发频率。
语句级(statement)触发器:是指当某触发事件发生时,该触发器只执行一次;行级(row)触发器:是指当某触发事件发生时,对受到该操作影响的每一行数据,触发器都单独执行一次。
触发器的限制:1、create trigger语句文本的字符长度不能超过32kb;2、触发器体内的select语句只能为select...into...结构,或者为定义游标所使用的select语句;3、触发器中不能使用数据库事务控制语句commit;rollback,svaepoint语句;4、由触发器所调用的过程或函数也不能使用数据库事务控制语句;
例1:
create table emp_his as select * from emp where 1=2;
create or replace trigger del_emp_trigger
before delete on emp for each row
begin
insert into emp_his(deptno,empno,ename,job,mgr,sal,comm,hiredate)
values(:old.deptno,:old.empno,:old.ename,:old.job,:old.mgr,:old.sal,:old.comm,:old.hiredate);
end;

替代(instead of)触发器:instead of选项使oracle激活触发器,而不执行触发事件。只能对视图和对象视图建立instead of触发器,而不能对表、模式和数据库建立instead of触发器。
例:
create or replace view emp_view as
select deptno,count(*) total_employeer,sum(sal) total_salary from emp group by deptno;

create or replace trigger emp_view_delete
instead of delete on emp_view for each row
begin
delete from emp where deptno=:old.deptno;
end emp_view_delete;

delete from emp_view where deptno=10;

系统事件触发器:
oracle提供的系统事件触发器可以在ddl或数据库系统上被触发。ddl指的是数据定义语言,如create、alter及drop等。而数据库系统事件包括数据库服务器的启动或关闭,用户的登录与退出、数据库服务错误等。
系统事件触发器既可以建立在一个模式上,又可以建立在整个数据库上。当建立在模式(schema)之上时,只有模式所指定用户的ddl操作和它们所导致的错误才激活触发器,默认时为当前用户模式。当建立在数据库(database)之上时,该数据库所有用户的ddl操作和他们所导致的错误,以及数据库的启动和关闭均可激活触发器。要在数据库之上建立触发器时,要求用户具有administrator database trigger权限。

如果在触发器内调用其他函数或过程,当这些函数或过程被删除或修改后,触发器的状态将被标识为无效。当dml语句激活一个无效触发器是,oracle将重新编译触发器代码,如果编译时发生错误,这将导致dml语句执行失败。

删除触发器:drop trigger trigger_name;
当删除表或视图时,建立在这些对象上的触发器也随之消失。

触发器的状态:有效状态(enable)、无效状态(disable)。
改变数据库trigger的状态:alter trigger emp_view_delete disable;
改变与指定表相关的所有触发器的使用状态:alter table emp disable all triggers;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值