本篇文章给大家分享的是有关oracle触发器是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。
Oracle触发器是什么呢?
首先我们来了解一下触发器是什么,触发器在触发一定事件的时候隐式执行的一段sql语句,触发器不能接收参数。Oracle触发器则是触发Oracle数据库中对数据库进行insert、update、delete操作或对视图进行类似的操作,还有一些系统的事件,比如数据库的关闭或开启。
触发器的分类有哪些?
(1)、数据操纵语言(DML)触发器:创建在表上,有DML时间来触发的触发器;
(2)、替代(insteadof)触发器:创建在视图上,用来替换对视图进行添加、修改和删除操作。
(3)、数据定义语言(DDL)触发器:定义在模式上,触发事件是对数据库对象的创建和修改操作。
(4)、数据库系统触发器:定义在整个数据库上,触发的时间是数据库的操作,比如数据库的启动和关闭。
触发器的组成部分有哪些?
(1)、触发的事件:即在何种情况下触发trigger,例如:insert、update、delete。
(2)、触发的时间:即该trigger是在触发事件之前(before)还是在触发事件之后(after),也是触发的事件和该trigger主体的先后顺序。
(3)、触发器本身:即触发器在触发事件的时候要执行的操作,例如:pl/sql块。
(4)、触发的频率:说明该触发器内定义的动作被执行的次数。即语句级触发器和行级触发器。语句级触发器是指当某个事件发生时,该触发器只执行一次。而行级触发器,在某个事件发生时,对受到该操作影响的每一行数据,都会单独执行一次触发器。
Oracle触发器实例:
--创建表
--员工表
CREATETABLEemp(
emp_IDNUMBER(10)PRIMARYKEY,
emp_nameVARCHAR2(20)NOTNULL,
emp_sexVARCHAR2(10),
emp_addressVARCHAR2(15)
);
--日志表
CREATETABLElogs(
LOG_IDNUMBER(10)PRIMARYKEY,
LOG_TABLEVARCHAR2(10)NOTNULL,
LOG_DMLVARCHAR2(10),
LOG_KEY_IDNUMBER(10),
LOG_DATEDATE,
LOG_USERVARCHAR2(15)
);
--创建序列
CREATESEQUENCElogs_id_squINCREMENTBY1
STARTWITH1MAXVALUE9999999NOCYCLENOCACHE;
CREATESEQUENCEemp_id_squINCREMENTBY1
STARTWITH1MAXVALUE9999999NOCYCLENOCACHE;
触发器的限制有哪些?
(1)、createtrigger语句的字符长度不能超多32kb;
(2)、触发器体内的select语句只能为select.....into.....结构,或者为定义游标所使用的select语句;
(3)、触发器中不能使用数据库事务控制语句,如:commit、rollback、savepoint语句;
(4)、由触发器调用的过程或函数也不能使用数据库事务控制语句;
(5)、触发器中不能使用lang、langrow类型;
(6)、触发器可以参照lob类型类的列值,但不能通过:new来修改lob列中的值;
(7)、触发器所涉及的表收到表约束的限制
以上就是oracle触发器是什么,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注亿速云行业资讯频道。