暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

PL/SQL详解之触发器

Oracle微学堂 2018-11-13
756

1
概念

触发器和存储过程类似,触发器可以调用存储过程,但是触发器不需要调用,触发器只能由数据可的特定事件来触发。

特定的触发事件:

用户在指定的表或视图中座DML操作,主要有:insertupdatedelete等。

用户做DDL操作,主要有:createalterdrop等。

数据库事件,主要包括:logon/logoff用户的登录或注销。

startup/shutdown数据库的打开或关闭。

erros特定的错误信息等。

2
作用

触发器可以根据不同的事件进行调用,有着更加精细的控制能力,可以完成很多普通语句完成不了的功能,主要作用:

自动生成自增长的字段。

执行更复杂的业务逻辑。

防止无意义的操作。

提供审计。

允许或限制修改某些表。

实现完整性规则。

保证数据的同步复制。

3
类型

数据操作语言(DML)触发器:

这种触发器定义到表上,对表执行insertupdatedelete操作是可以激发该类型的触发器。利用该触发器可以复制,检查,替换某种符合指定条件的数据。按照触发器级别可以分两种,第一种行级触发器,表示每条记录修改时都会激发给触发器;第二种语句级触发器,表示sql语句执行实际发该触发器,与修改多少条记录无关。以数据的更改事件为准,则分为beforeafter两种。

数据定义语言(DDL)触发器。当createalterdrop模式对象是会触发相关触发器。在oracle中可以简单的理解一个用户就有一个和他同名的模式,利用它可以使某些表不能被修改或删除。

复合触发器:

Oracle11g的新特性,相当于在一个触发器中包含了四种触发器,包含了before类型的语句级,before类型的行级,after类型的语句级,after类型的行级。这使得变量的传递更加方便。

instead of触发器:

这种类型的触发器通常作用在视图上,对由多个源表的视图座DML操作通常是不被允许的,这种情况可以利用instead of触发器解决问题。利用它可以把对视图的DML操作转换成对多个源表进行操作。

用户和系统事件触发器:

作用在数据库上游数据库事件激发的触发器,如登录注销,利用它可以记录数据库的登录情况。

4
案列分析

--建立一个触发器, 当职工表 emp 表被删除一条记录时,把被删除记录写到职工表删除日志表中去。

CREATE TABLE emp_his AS SELECT * FROM EMP WHERE 1=2;

CREATE OR REPLACE TRIGGER tr_del_emp

   BEFORE DELETE --指定触发时机为删除操作前触发

   ON scott.emp

   FOR EACH ROW   --说明创建的是行级触发器

BEGIN

   --将修改前数据插入到日志记录表 del_emp ,以供监督使用。

   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;

DELETE emp WHERE empno=7788;

DROP TABLE emp_his;

DROP TRIGGER del_emp;

扫描二维码关注我的微学堂

搜索刘老师微信号:Rman-2014,备注“Oracle学习与咨询”,即可添加好友;或者扫描下面二维码,关注我的“微学堂”公众号,了解最新OCP认证动态、题库及答案解析、培训机构及讲师介绍、课堂授课内容等。每天还有一篇技术文章发布哦!


最后修改时间:2019-12-20 16:31:21
文章转载自Oracle微学堂,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论