触发器类似与存储过程,都是为了实现特殊功能而执行的代码块。
触发器不允许用户显示传递参数,不能够返回参数值,不允许用户调用触发器。
触发器只是在Oracle合适的时间自动调用,非常类似于面向编程中的拦截器。
触发器按照触发事件类型、对象不同分为:语句触发器,行触发器,Instead of触发器,系统事件触发器,用户触发器
前三者:针对一般数据表有insert、update、delet、DML操作,后2者为系统事件,drop、alter、DDL操作
DML-DML(Data Manipulation Language)数据操纵语言命令使用户能够查询数据库以及操作已有数据库中的数据
DDL(Data Definition Language),是用于描述数据库中要存储的现实世界实体的语言。
CREATE TRIGGER [trigger_name] FOR INSERT,UPDATE,DELETE --trigger_name为触发器名称,在执行什么动作时候触发
ON [dbo].[Table] --对应的表
ASSql_statement
实例
create or replace trigger tri_name1 --创建一个触发器名称
before insert --在执行什么操作时候触发
on table1 --对应的表
for each row --行级触发器
begin --执行代码块
if inserting then
update hglims.contract set status=:NEW.StatusID where ContractId=:NEW.ContractId; --在插入的时候去修改hglims.contract表中的status、ContractId数据(hglims为一个用户名)
end if;
end;
Oracle中的触发器共有哪几类?
语句触发器、行触发器、instead of触发器、系统事件触发器和用户事件触发器。
语句触发器和行级触发器的区别是什么?
语句触发器:针对一次DML操作,无论影响到表多少条记录,只触发一次。
行级触发器:针对DML操作影响到的所有记录,均会触发一次。
简述instead of触发器的主要特点
instead of触发器,则完全代替了DML操作,也就是说,执行触发器动作,而本来的DML操作不会执行
列举两个触发器应用场景
对于视图的更新操作可以利用instead of触发器进行,从而自定义如何更新源数据表。
1. 信息汇总
当明细数据更新时,可以利用触发器实现汇总数据的更新。
2. 数据备份
当数据更新时,可以利用触发器将原数据记录到历史数据表中,从而实现数据跟踪。
什么是用户事件触发器?
用户事件触发器创建时不再针对单个数据库对象,而是建立在用户或用户的模式之上。