2024年4月19日发(作者:)
Oracle触发器详解
一、触发器概述
触发器是特定事件出现的时候,自动执行的代码块。类似于存储过程,但
是用户不能直接调用他们。
功能:
1、 允许/限制对表的修改
2、 自动生成派生列,比如自增字段
3、 强制数据一致性
4、 提供审计和日志记录
5、 防止无效的事务处理
6、 启用复杂的业务逻辑
触发器触发时间有两种:after和before。
1、触发器的语法:
CREATE [OR REPLACE] TIGGER触发器名 触发时间 触发事件
ON表名
[FOR EACH ROW]
BEGIN
pl/sql语句
END
其中:
触发器名:触发器对象的名称。
由于触发器是数据库自动执行的,因此该名称只是一个名称,
没有实质的用途。
触发时间:指明触发器何时执行,该值可取:
before---表示在数据库动作之前触发器执行;
after---表示在数据库动作之后出发器执行。
触发事件:指明哪些数据库动作会触发此触发
器:
insert:数据库插入会触发此触发器;
update
:数据库修改会触发此触发器;
delete:数据库删除会触发此触发器。
表名:数据库触发器所在的表。
for each row:对表的每一行触发器执行一次。如果没有这一选项,则只对
整个表执行一次。
触发器的组成部分:
1、 触发器名称
2、 触发语句
3、 触发器限制
4、 触发操作
触发器类型:
1、 语句触发器
2、 行触发器
3、 INSTEAD OF 触发器
4、 系统条件触发器
5、 用户事件触发器
注释:
before和after:指在事件发生之前或之后激活触发器。
instead of:如果使用此子句,表示可以执行触发器代码来代替导致触发器调用
的事件。
insert、 delete和update:指定构成触发器事件的数据操纵类型,update还
可以制定列的列表。此类触发器用的不多,经常用于视图,不做重点。
table_or_view_name:指要创建触发器的表或视图的名称。
for each row:指定是否对受影响的每行都执行触发器,即行级触发器,如果不
使用此子句,则为语句级触发器。
when:限制执行触发器的条件,该条件可以包括新旧数据值得检查。
declare---end:是一个标准的PL/SQL块。
referencing:指定新行(即将更新)和旧行(更新前)的其他名称,默认为new
和old。在触发器中,有两个重要行级绑定变量。:old 和 :new
弄一个表,啥子都
说明了。
insert
delete
update
:old
NO
YES
YES
:new
YES
NO
YES
触发器不能过度的使用,不然可能会出去死循环,效率低,无法维护等问题。所以,还是
要慎重使用触发器。对如:在数据修改时需要自动完成一些工作,就可以使用触发器。
使用场合:
控制数据安全 实现数据审计 实现数据完整性 实现参照完整性。
管理触发器(使用工具操作会很简单):
1、显示触发器
select 触发器名字,status from user_triggers where table_name='emp';
2、禁止触发器
alter trigger 触发器名字 disable (all triggers) ;--红色部分表示对表的所有触发器执行操作
3、激活触发器
alter trigger 触发器名字 enable (all triggers);
4、删除触发器
drop trigger 触发器名字;
触发器和存储过程:
编号
编号
触发器
无参数、返回值
不能commit或则rollback
过程
有参数、有返回值(参数)
能
手工调用
与表无关
调用方式 时间发生时自动调用
操作对象 基于某张表


发布评论