Oracle之触发器

什么是触发器?

触发器是一种特别的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;



可以发现,emp_log表中多了一条数据



这就是一个简单的触发器的例子,当然它可以很复杂,这里只对其原理做简单的介绍。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值