目录
1 触发器
触发器时存储在数据库中的程序单元,当数据库中发生某些事件时,如insert,delete,数据库会自动触发触发器。执行相应的操作。
1.1 触发器概述
触发器在创建成功后,不能直接被调用,只有当触发条件成立时,才能执行。触发器存在以下作用
- 允许、限制表的修改
- 提供日志记录
- 防止无效的事物处理
- 启动复杂的业务逻辑
触发事件:
- insert:当指定表发生插入时执行触发器
- update:当指定表发生更新时执行触发器
- delete:当指定表发生删除时执行触发器
- create:创建对象时执行触发器
- alert:修改对象时执行触发器
- drop:删除对象时执行触发器
- startup/shutdown:数据库打开或者关闭时执行触发器
触发时间
- before 在指定时间发生前执行
- after 在指定时间发生后执行
触发级别
- 行触发:对于指定表,改变一行数据,触发一次,这种类型的触发器只有在insert、update、delete完成以后被触发
- 语句触发:对于触发事件只能触发一次且不能访问。简单来说无论sql语句影像多少行记录,触发器只执行一次。
1.2 触发器的创建
触发器的创建语法
create or replace trigger trigger_name
before|after|instead of
trigger_event on table|view
for each row
enable|disable
when(condition)
body
- replace 如果创建的触发器已经存储在则替换为当前罪行触发器
- trigger_name 触发器名称
- before|after|instead of 语句执行前触发 after 语句执行后触发 instead of 替换行触发器
- trigger_event 触发事件 一个触发器可以有多个触发器
- table|view 执行触发器的表或者试图
- for each row 行级触发器,省略默认为语句机触发器
- enable|disable 设置触发器是否可用状态
- when(condition) 触发器被触发的条件
- body 过程体 触发后执行的具体操作
create or replace trigger test_trigger --创建或者替换触发器 test_trigger
after delete on emp --指定触发事件和执行触发器的表
begin -- 执行体
if deleteing then
dmps_out.put_line('删除。。。。')
end if;
end; -- 结束
1.3 触发器维护
修改触发器:使用replace关键字
重新编译触发器:如果需要对触发器进行重新编译可以使用语法 alert trigger trigger_name comple
禁用启用触发器 alert trigger trigger_name disable 禁用 alert trigger trigger_name enable 启用
删除触发器 drop trigger trigger_name
参考 oracle 从入门到精通