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类型触发器相关推荐

  1. oracle执行脚本顺序执行吗,【ORACLE】记录通过执行Oracle的执行计划查询SQL脚本中的效率问题 - 不及格的飞鱼...

    记录通过执行Oracle的执行计划查询SQL脚本中的效率问题 问题现象: STARiBOSS5.8.1R2版本中,河北对帐JOB执行时,无法生成发票对帐文件. 首先,Quartz表达式培植的启动时间为 ...

  2. oracle生成主键函数,Oracle学习记录之使用自定义函数和触发器实现主键动态生成...

    很早就想自己写写Oracle的函数和触发器,最近一个来自课本的小案例给了我这个机会.现在把我做的东西记录下来,作为一个备忘或者入门的朋友们的参考. 案例介绍: 招投标管理系统(数据库设计). 数据表有 ...

  3. oracle dml触发器写法,Oracle DML类型触发器

    Oracle DML类型触发器是Oracle开发过程中最常用和最常见的触发器,主要用于DML操作,例如: 插入,删除,更新操作事件触发器. 由DML类型触发器安装的事件触发前后和数据触发器的类型可以分 ...

  4. Oracle一张表写多个触发器,详解oracle中通过触发器记录每个语句影响总行数

    详解oracle中通过触发器记录每个语句影响总行数 需求产生: 业务系统中,有一步"抽数"流程,就是把一些数据从其它服务器同步到本库的目标表.这个过程有可能 多人同时抽数,互相影响 ...

  5. oracle触发器报错语法,Oracle 触发器

    Oracle触发器是使用者对Oracle数据库的对象做特定的操作时,触发的一段PL/SQL程序代码,叫做触发器.触发的事件包括对表的DML操作,用户的DDL操作以及数据库事件等. 一.触发器的作用 O ...

  6. oracle触发器if多条件,oracle触发器使用总结

    触发器 是特定事件出现的时候,自动执行的代码块.类似于存储过程,但是用户不能直接调用他们.触发器是许多关系数据库系统都提供的一项技术.在ORACLE系统里,触发器类似过程和函数,都有声明,执行和异常处 ...

  7. oracle中触发器作用,详细解析Oracle数据库触发器的功能种类及其作用

    触发器是一种特殊类型的存储过程,它不同于存储过程.触发器主要是通过事件进行触发而被执行的,触发器的触发事件分可为3类,分别是DML事件.DDL事件和数据库事件,而存储过程可以通过存储过程名字而被直接调 ...

  8. Oracle入门(十四.19)之触发器简介

    一.触发器的需求 让我们从一个例子开始吧:一条业务规则规定,只要员工的工资发生变化,变更就必须记录在日志记录表中. 可以创建两个过程来执行此操作: UPD_EMP_SAL更新工资,LOG_SAL_CH ...

  9. oracle用户的追踪文件,Oracle中怎样通过触发器来追踪用户的活动?

    从Oracle8i开始,Oracle引入了特殊的触发器,这些触发器并不是和特殊的DML事件相关联的(DML事件,如,INSERT,UPDATE和DELETE).这些系统级别的触发器包括数据库启动触发器 ...

最新文章

  1. 数据告诉你,胡歌的微世界
  2. python turtle画圣诞树-Python画一棵漂亮的樱花树(不同种樱花+玫瑰+圣诞树喔)
  3. Android -- 自定义ProgressBar图片
  4. 查看selenium python的api小记录
  5. Python与机器视觉(三)图像保存
  6. 互联网产品经理喜欢的内容,连张小龙都主动加微信的男人写的
  7. 混迹职场,有交换意识的人都是聪明人
  8. 防止HALCON刷新图像窗口控件闪烁
  9. [工具类]将时间转换为unix时间戳格式
  10. Mysql时间函数及格式处理
  11. openproj不能修改日期的原因分析与解决
  12. 计算一个三位数的个十百c语言,“任意输入一个三位数,输出这个三位数的百位、十位和个位,并且计算十位百位个位的和.”c语言程序...
  13. mysql实现跨库查询
  14. macOS 中英文输入法切换终极解决方案
  15. 美军回应网传UFO:视频为真 现有人类技术无法达到
  16. 微型计算机 2018 12月下,桌面CPU天梯图2018年12月最新版 十二月台式电脑处理器排名...
  17. mysql-索引分析
  18. Android集成GMS服务及GMS认证方案
  19. hdu 6863 Isomorphic Strings
  20. CF小组训练赛 Holiday 19

热门文章

  1. win10浏览器闪退_Win10系统Edge浏览器闪退问题的解决方法
  2. 机械学哪种计算机语言,对于机器学习,到底该选择哪种编程语言?
  3. 【英语学习】【WOTD】smithereens 释义/词源/示例
  4. 【英语学习】【WOTD】wherewithal 释义/词源/示例
  5. 使用idea 打jar包
  6. 隐式连接时,windows下VS(包括2005、2008等)下配置OpenCV动态库的步骤
  7. VS2005、VS2010等VS系列IDE在MFC开发过程中,Resource View标签打不开,问题为“opened in other editor”
  8. rssi室内定位算法原理_室内定位方案常用的4种定位算法
  9. leetcode 429 层序遍历n叉树(C语言)
  10. 基于 CoreAudio 的音频编解码(二):音频编码