什么是触发器?
触发器是一种特别的PL/SQL命名块,他与过程和函数类似,是编译好的,存储在数据库中的过程,编写定义的方式类似于过程和函数:
我们先来看看触发器定义的格式:
CREATE OR REPLACE TRIGGER 触发器的名称
BEFORE|AFTER 触发事件 ON 表名称
FOR EACH ROW
WHEN(触发的条件)
BEGIN
执行触发器时所要进行的操作。
END;
1.CREATE ORREPLACE:创建或者修改的关键字
2. TRIGGER:触发器的关键字
4. 触发事件:表示执行这个操作事件时触发。比如(INSERT,UPDATE,DELETE)
5. BEFORE|AFTER:触发器执行的时间。表示在事件(DML操作)执行之前或者之后触发这个触发器。
5. FOR EACH ROW:表示如果某个造作影响了表中的多行数据,在每一行都会触发一次这个触发器。
6. WHEN:触发的条件,表示当操作满足这个条件时,才会触发这个触发器。
7. BEGIN 和 END 之间就是这个触发器所要执行的操作
我把它看做与java中的方法的概念差不多,但是调用触发器并非由外部的程序显示调用,而是由oracle隐式调用,
就是当数据库中发生某些事件之后,就会触发某个触发器,比如在对某个表进行插入操作时,触发了这个表
的DML触发器,由这个触发器执行一些相应的操作,比如记录事件日志,实现id自增等等。
写个简单的例子:
创建一个日志表:
<span style="font-size:14px;">CREATE TABLE emp_log(
update_time DATE,
empno NUMBER
);</span>
创建一个触发器:(在执行update操作之后,触发这个触发器,向 emp_log 表中插入一条数据)
CREATE OR REPLACE TRIGGER emp_trigger
AFTER UPDATE ON emp
FOR EACH ROW
BEGIN
IF UPDATING THEN
INSERT INTO emp_log
VALUES(
SYSDATE,:old.EMPNO
);
END IF;
END emp_trigger;
此时日志表中还没有任何数据:
写一个update语句测试一下:
UPDATE emp SET sal=sal-500 WHERE sal>5500;
这就是一个简单的触发器的例子,当然它可以很复杂,这里只对其原理做简单的介绍。