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;





0 0
原创粉丝点击