您的位置:首页 > 数据库 > Oracle

oracle数据库对象--触发器(TRIGGER)

2018-02-06 20:49 375 查看

触发器 TRIGGER

一向百毒不侵的我竟然在这个关节眼上感冒了,脑袋也昏昏的,一迷糊就不知道在想什么,贼难受,咳咳咳咳.

今天介绍一下,oralce 数据库中的另一个基本对象–触发器,如果你了解了存储函数和存储过程,那么了解触发器就特别简单了,因为本身触发器也是一块pl/sql程序块,有定义,有声明,有执行等等,然而和存储函数或过程不同的是:过程和函数是需要外界调用,或主动调用才能执行的,而触发器则是触发器是有一个事件来启动和运行的,也就是当事件发生时,隐式的触发执行的,且触发器不能接受参数。

oracle事件包括 对表的 insert update delete 以及对视图的相应操作。该篇主要介绍关于dml触发器,其他的替代触发器和系统触发器,有需要的可以去了解。

触发器4个基本组成:

(1)触发事件:即在什么事件发生时触发,常见事件如 insert ,update,delete;

(2)触发时间:这里的时间是相对于事件发生前后来说的,可以定义在事件发生之前和事件发生之后 before | after

(3)触发器本身:这是关键,也就是我们为什么要创建这个触发器,要用它做什么,触发器的主体,一段pl/sql程序块

(4)触发器频率:说明触发器内,在事件发生时,触发的频率,常见有语句级触发器和行级触发器,语句级就是该条语句执行一次,触发器触发一次,而行级触发器则是每操作一行就执行一次触发器,定义时需要添加(for each row)

基本格式:

CREATE [OR REPLACE] TRIGGER trigger_name

{before | after}

{insert | update | delete}

on table_name

[for each row]

[where condition]

begin

执行体

end;

直接看两个示例吧

//在每删除员工表的一条记录时就将要删除的数据,拷贝到员工删除表中;

create table delemp
as
select * from emplooyees where 1=2;

------------------------------------------------
create or replace trigger copy_tri
before                                      //删除之前触发
delete on employees
for each row                         //删除每一行数据都触发
begin
insert into delemp(employee_id,last_name,salary) values(:old.employee_id,:old.last_name,:old.salary);
end;

//这里提一下关于:old   ,和:new
:old  代表修饰符访问操作完成前的值;
:new 代表修饰符访问操作完成后的值。


当删除表和视图时,该表所对应的触发器也会删除,我们也可以使用语句

drop trigger trigger_name;

后续完善,头疼的厉害。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息