oracle触发器记录所有dml,Oracle DML类型触发器
Oracle DML类型触发器
Oracle DML类型触发器是Oracle开发过程当中最经常用到,也是最常见的触发器,主要是对DML操作,如:insert、delete、update操作事件进行触发。
DML类型触发器安装触发的事件的前后和数据触发的类型可以分为四类:前置行级触发器、后置行级触发器、前置语句级触发器、后置语句级触发器。
创建DML类型触发器的语法结构如下:create [ or replace] trigger tr_name(触发器名)
before|after
delete| insert | update [of column1,column2...]
[or delete |insert| update of colum1,colum2...]
on table_name(表名)
[for each row]
[follows tr_name1(其它触发器名)]
[when 条件]
declare
--声明部分
begin
--触发器内容部分
end;
语法解析:
1、or replace :存在同名的触发器就覆盖保存。
2、trigger:创建触发器的关键词。
3、before|after表示是选择的触发器是数据改变之前触发、数据改变之后触发。
4、delete| insert | update:表示触发器触发的事件类型是删除、插入或更新。
5、for each row: 表示行级触发器、不填就是语句级触发器
6、follows :表示触发器的顺序是跟在哪个之后。
7、when表示触发器语句触发的条件
行级触发器
行级触发器一般用来做数据的校验或者记录数据的操作日志,下面是一个行级触发器的例子:
案例1、利用行级触发器记录更新学生信息表时的操作记录,代码如下:create or replace trigger tr_stuinfo_update
before update on stuinfo
for each row
begin
--当学生班号发生变化时,
if :new.CLASSNO <> :old.CLASSNO then
--插入操作日志表
insert into oplog
(LOGID, --日志ID
TABLENAME, --表名
COLNAME, --列名
NEWDATA, --改变后数据
OLDDATA, --改变前数据
OPDATE, --操作时间
OPERATOR) --操作人
values
(pk_oplog_id.nextval,
'stuinfo',
'classno',
:new.classno,
:old.classno,
sysdate,
'jsq');
end if;
end;
代码解析:
1、这是一个学生信息表(stuinfo)update的前置行级触发器,当修改学生的班号时,会把修改的记录的操作信息记录在日志表(oplog)中。
2、行级触发器通过:new和:old来访问变化之后的数据和变化之前的数据,update类型触发器,新旧数据都可以访问,delete类型触发器,只能访问:old值,insert类型触发器只能访问:new值。
建立好触发器,我们更改一条数据看下效果,代码如下:update stuinfo t set t.classno = 'C201802' where t.stuid = 'SC201801006';
select * from oplog;
结果如下:
语句级触发器
语句级触发器一般是用来做特定限制语句操作的作用,比如在某一段时间内禁止某一部分语句操作,下面是一个语句级触发器的案例:
案例2、比如今天是12月15号,我就禁止每月的15号禁止操作学生信息表(stuinfo)的插入和删除或修改操作。代码如下:create or replace trigger tr_stuinfo_sql
before update or insert or delete on stuinfo
begin
--每月15号禁止操作学生信息表
if to_char(sysdate,'dd')='15' then
raise_application_error(-20001,'每月15号不能对学生信息表进行正删改操作!');
end if;
end;
代码解析:
1、DML语句触发器就是行级触发器省略掉for each row的写法。
2、raise_application_error是主动给客户端抛出-20001代码错误的信息。
建立好触发器,我们更新一条数据看下效果,结果如下:
总结:
同一个对象上可以有多个DML触发器,但是触发器触发的时候有先后顺序,比如before型触发器比after型触发器先触发,在此基础上行级触发器,比语句级触发器更早触发。同类型的触发器的先后顺序就按follows关键词+触发器名进行排序。
oracle触发器记录所有dml,Oracle DML类型触发器相关推荐
- oracle执行脚本顺序执行吗,【ORACLE】记录通过执行Oracle的执行计划查询SQL脚本中的效率问题 - 不及格的飞鱼...
记录通过执行Oracle的执行计划查询SQL脚本中的效率问题 问题现象: STARiBOSS5.8.1R2版本中,河北对帐JOB执行时,无法生成发票对帐文件. 首先,Quartz表达式培植的启动时间为 ...
- oracle生成主键函数,Oracle学习记录之使用自定义函数和触发器实现主键动态生成...
很早就想自己写写Oracle的函数和触发器,最近一个来自课本的小案例给了我这个机会.现在把我做的东西记录下来,作为一个备忘或者入门的朋友们的参考. 案例介绍: 招投标管理系统(数据库设计). 数据表有 ...
- oracle dml触发器写法,Oracle DML类型触发器
Oracle DML类型触发器是Oracle开发过程中最常用和最常见的触发器,主要用于DML操作,例如: 插入,删除,更新操作事件触发器. 由DML类型触发器安装的事件触发前后和数据触发器的类型可以分 ...
- Oracle一张表写多个触发器,详解oracle中通过触发器记录每个语句影响总行数
详解oracle中通过触发器记录每个语句影响总行数 需求产生: 业务系统中,有一步"抽数"流程,就是把一些数据从其它服务器同步到本库的目标表.这个过程有可能 多人同时抽数,互相影响 ...
- oracle触发器报错语法,Oracle 触发器
Oracle触发器是使用者对Oracle数据库的对象做特定的操作时,触发的一段PL/SQL程序代码,叫做触发器.触发的事件包括对表的DML操作,用户的DDL操作以及数据库事件等. 一.触发器的作用 O ...
- oracle触发器if多条件,oracle触发器使用总结
触发器 是特定事件出现的时候,自动执行的代码块.类似于存储过程,但是用户不能直接调用他们.触发器是许多关系数据库系统都提供的一项技术.在ORACLE系统里,触发器类似过程和函数,都有声明,执行和异常处 ...
- oracle中触发器作用,详细解析Oracle数据库触发器的功能种类及其作用
触发器是一种特殊类型的存储过程,它不同于存储过程.触发器主要是通过事件进行触发而被执行的,触发器的触发事件分可为3类,分别是DML事件.DDL事件和数据库事件,而存储过程可以通过存储过程名字而被直接调 ...
- Oracle入门(十四.19)之触发器简介
一.触发器的需求 让我们从一个例子开始吧:一条业务规则规定,只要员工的工资发生变化,变更就必须记录在日志记录表中. 可以创建两个过程来执行此操作: UPD_EMP_SAL更新工资,LOG_SAL_CH ...
- oracle用户的追踪文件,Oracle中怎样通过触发器来追踪用户的活动?
从Oracle8i开始,Oracle引入了特殊的触发器,这些触发器并不是和特殊的DML事件相关联的(DML事件,如,INSERT,UPDATE和DELETE).这些系统级别的触发器包括数据库启动触发器 ...
最新文章
- 数据告诉你,胡歌的微世界
- python turtle画圣诞树-Python画一棵漂亮的樱花树(不同种樱花+玫瑰+圣诞树喔)
- Android -- 自定义ProgressBar图片
- 查看selenium python的api小记录
- Python与机器视觉(三)图像保存
- 互联网产品经理喜欢的内容,连张小龙都主动加微信的男人写的
- 混迹职场,有交换意识的人都是聪明人
- 防止HALCON刷新图像窗口控件闪烁
- [工具类]将时间转换为unix时间戳格式
- Mysql时间函数及格式处理
- openproj不能修改日期的原因分析与解决
- 计算一个三位数的个十百c语言,“任意输入一个三位数,输出这个三位数的百位、十位和个位,并且计算十位百位个位的和.”c语言程序...
- mysql实现跨库查询
- macOS 中英文输入法切换终极解决方案
- 美军回应网传UFO:视频为真 现有人类技术无法达到
- 微型计算机 2018 12月下,桌面CPU天梯图2018年12月最新版 十二月台式电脑处理器排名...
- mysql-索引分析
- Android集成GMS服务及GMS认证方案
- hdu 6863 Isomorphic Strings
- CF小组训练赛 Holiday 19
热门文章
- win10浏览器闪退_Win10系统Edge浏览器闪退问题的解决方法
- 机械学哪种计算机语言,对于机器学习,到底该选择哪种编程语言?
- 【英语学习】【WOTD】smithereens 释义/词源/示例
- 【英语学习】【WOTD】wherewithal 释义/词源/示例
- 使用idea 打jar包
- 隐式连接时,windows下VS(包括2005、2008等)下配置OpenCV动态库的步骤
- VS2005、VS2010等VS系列IDE在MFC开发过程中,Resource View标签打不开,问题为“opened in other editor”
- rssi室内定位算法原理_室内定位方案常用的4种定位算法
- leetcode 429 层序遍历n叉树(C语言)
- 基于 CoreAudio 的音频编解码(二):音频编码