oracle触发器详解
来源:互联网 发布:java 异常 编辑:程序博客网 时间:2024/06/06 14:17
触发器就是一种可以在数据库中触发事件的代码
触发器必须由事件才能触发 触发器的触发事件分3类
分别是DML事件 DDL事件 和数据库事件
触发器的定义位置
DML触发器(数据操作触发器):创建在表上由DMl事件引发的触发器
DDL触发器(数据定义语言触发器):定义在模式上 触发事件是数据库对象的创建修改
数据库事件触发器:定义在整个数据库或者模式上触发事件是数据库事件
DML触发器
DML触发器是定义在表上的触发器 由DML事件引发编写DML触发器的要素是:
1.确定触发的表,即定义触发器的表
2.确定触发事件,DML的触发事件有 insert、update 和delete
3.确定触发的时间,触发时间有 BEFORE 和 After两种
BEFORE代表DML语句执行之前触发
After代表DML语句执行之后触发
4.语句级触发器和行级触发器
语句级触发器表示只触发一次的触发器 行级触发器表示每执行一行就触发一次的触发器
在行级触发器中 用:new 和:old 来访问数据变更前后的值
但要注意 insert语句插入一条新纪录 所以所以没有:old记录,而DELETE语句删除掉一条已经存在的记录,所以没有:new记录。UPDATE语句既有:old记录,也有:new记录,分别代表修改前后的记录。
具体的语法:
:old.字段名
:new.字段名
触发器的创建:
CREATE OR REPLACE TRIGGER 触发器名
(OR REPLACE代表有相同名字的触发器就覆盖)
BEFORE|AFTER
INSERT|UPDATE|DELETE [OR 触发事件2 OR触发事件3]
ON 要触发的表名
[FOR EACH ROW|WHEN]
BEGIN
触发后要执行的语句
END;
下面给几个实例:
1. 创建一个行级触发器LOG_SAL,记录对职务为CLERK的雇员工资的修改,且当修改幅度超过200时才进行记录。用WHEN条件限定触发器。
首先要有个表 EMP
如图
然后打开SQL 输入如下代码
CREATE OR REPLACE TRIGGER log_salBEFOREUPDATE OF sal ON emp FOR EACH ROWwhen (new.job='CLERK' AND (ABS(new.sal-old.sal)>200))DECLAREv_no NUMBER;BEGINSELECT COUNT(*) INTO v_no FROM logerr;INSERT INTO logerr VALUES(v_no+1,'雇员'||:new.ename||'的原工资:'||:old.sal||'新工资:'||:new.sal);END;
- Oracle触发器详解
- oracle触发器详解
- oracle 创建触发器详解
- oracle 触发器详解
- oracle触发器详解
- Oracle触发器详解
- ORACLE触发器详解
- ORACLE触发器详解
- oracle 触发器详解
- ORACLE触发器详解
- ORACLE触发器详解
- oracle 触发器详解
- ORACLE触发器详解
- ORACLE触发器详解
- ORACLE触发器详解
- ORACLE触发器详解
- ORACLE触发器详解
- ORACLE触发器详解
- 设置ViewPagerIndicator框架中IconPageIndicator的图片指示器间距
- sock_init
- OJ--C++类实现最大数的输出
- 学习使用:before和:after伪元素
- 在MyEclipse中如何创建Maven项目
- oracle触发器详解
- qt 1
- MYSQL 二进制安装+XFS
- 第六周【项目6-复数模板类】
- java web中使用JFreeChart制作图表
- 第六周 项目四 成员、友元和一般函数有区别
- Laravel 4 用户请求中的数据
- java连接SQL数据库
- git 基本用法