下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922

Oracle触发器以及Oracle触发器实例讲解

作者:课课家教育     来源: http://www.kokojia.com点击数:817发布时间: 2017-06-03 10:00:55

标签: Oracle触发器数据库

  这篇文章主要是介绍了Oracle触发器,结合实例形式分析了Oracle触发器,给有需要的朋友参考学习。

  1、触发器的简介

  触发器(Trigger)是数据库对象的一种,编码方式类似存储过程,与某张表(Table)相关联,当有DML语句对表进行操作时,可以引发触发器的执行,达到对插入记录一致性,正确性和规范性控制的目的。触发器在触发一定事件的时候隐式执行的一段sql语句,触发器不能接收参数。Oracle触发器则是触发Oracle数据库中对数据库进行insert、update、delete操作或对视图进行类似的操作,还有一些系统的事件,比如数据库的关闭或开启。

  2、触发器类型

  1)数据操作语言(DML)触发器:Oracle可以在DML语句进行触发,可以在DML操作前或操作后进行触发,并且可以对每个行或语句操作上进行触发。

  2)替代(instead of)触发器:由于在Oracle里,不能直接对由两个以上的表建立的视图进行操作。所以给出了替代触发器。替代触发器可以在由一个以上的表组成的视图上进行insert,update,delete,merge。也可以yoga使用instead of来创建分区表等。

  3)数据定义语言(DDL)触发器:主要是用来操纵Oracle数据库的结构,可以使用DDL语句定义、修改和删除在Oracle中存在的每种类型的对象。

  4)数据库系统触发器:可以在Oracle数据库系统的事件中进行触发,如Oracle系统的启动与关闭等。

Oracle触发器以及Oracle触发器实例讲解_Oracle_触发器_数据库_课课家教育

  3、触发器组成部分

  1)触发的事件:引起触发器被触发的事件。例如:DML语句(insert、update、delete语句对表或视图执行数据处理操作)、DLL语句(如create、alter、drop语句在数据库中创建、修改、删除模式对象)、数据库系统事件(如系统启动或退出、异常错误)、用户事件(如登录或退出数据库)。

  2)触发时间:即该trigger是在触发事件发生之前(before)还是在之后(after)触发,也就是触发事件和该trigger的曹组顺序。

  3)触发操作:即该trigger被触发之后目的和意图,这是触发器本身要做的事情。例如:PL/SQL块。

  4)触发对象:包括表、视图、模式、数据库。只有在这些对象上发生了符合条件的触发事件,才会执行触发操作。

  5)触发条件:由when子句指定一个逻辑表达式。只有当该表达式的值为true时,遇到触发器事件才会执行触发器,使其执行触发操作。

  6)触发频率:说明触发器内定的动作被执行的次数。即语句级(statement)触发器和行级(row)触发器。

  4、触发器实例

  --创建表

  --员工表

  CREATE TABLE emp(

  emp_ID NUMBER(10) PRIMARY KEY,

  emp_name VARCHAR2(20) NOT NULL,

  emp_sex VARCHAR2(10),

  emp_address VARCHAR2(15)

  );

  --日志表

  CREATE TABLE logs(

  LOG_ID NUMBER(10) PRIMARY KEY,

  LOG_TABLE VARCHAR2(10) NOT NULL,

  LOG_DML VARCHAR2(10),

  LOG_KEY_ID NUMBER(10),

  LOG_DATE DATE,

  LOG_USER VARCHAR2(15)

  );

  --创建序列

  CREATE SEQUENCE logs_id_squ INCREMENT BY 1

  START WITH 1 MAXVALUE 9999999 NOCYCLE NOCACHE;

  CREATE SEQUENCE emp_id_squ INCREMENT BY 1

  START WITH 1 MAXVALUE 9999999 NOCYCLE NOCACHE;

  5、触发器的限制

  1)Create Trigger语句文本的字符长度不能超过32K;

  2)触发器体内的select语句只能为select…into…结构,或者为定义游标所使用的select语句;

  3)触发器中不能使用数据库事务控制语句commit;rollback;svaepoint语句;

  4)由触发器所调用的过程或函数也不能使用数据库事务控制语句;

  5)触发器中不能使用long,long raw类型;

  6)触发器内可以参照LOB类型列的列值,但不能通过:new修改lob列中的数据。

  6、编写触发器时,需要注意一下几点:

  1)触发器不能接收参数;

  2)一个表最多可有12个触发器,但同一时间、同一事件、统一类型的触发器只能有一个。并且触发器之间不能有矛盾。

  3)在一个表上的触发器越多,对该表上的DML操作的性能影响就越大。

  4)在触发器的执行部分只能用DML语句(select、inset、update、delete),不能使用DLL语句(crate、alter、drop)。

  5)触发器最大为32K。若确实需要,可以先建立过程,然后在触发器中庸call语句进行调试。

  6)触发器中不能包含事务控制语句(commit、rollback、savepoint)。因为触发器是触发语句的一部分,触发语句被提交、回退时,触发器也被提交、回退了。

  7)在触发器主题中调用任何过程、函数,都不能使用事务控制语句。

  8)在触发器主题中不能声明任何long和blob变量。新值new和旧值old也不能是表中的任何long和blob列。

  9)不同类型的触发器(如DML触发器、instead of触发器、系统触发器)的语法格式和作用较大的区别。

  希望本文所述对大家Oracle数据库程序射你有所帮助,感兴趣的朋友可以深入学习。您还有什么疑问,可登录课课家教育或关注公众号【课课家IT精品课程】与我们交流,您的大力支持,将是对我们最大的鼓励!

赞(18)
踩(1)
分享到:
华为认证网络工程师 HCIE直播课视频教程