我是靠谱客的博主 幸福抽屉,最近开发中收集的这篇文章主要介绍oracle 学习笔记之触发器,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

说明
数据库触发器是一个与表相关联的、存储的PL/SQL程序。

每当一个特定的数据操作语句(Insert,update,delete)在指定的表上发出时,Oracle自己主动地运行触发器中定义的语句序列。
触发器的类型
语句级触发器:在指定的操作语句操作之前或之后运行一次,无论这条语句影响了多少行 。
行级触发器(FOR EACH ROW):触发语句作用的每一条记录都被触发。

在行级触发器中使用old和new伪记录变量, 识别值的状态。

触发器可用于:1)数据确认  2)实施复杂的安全性检查.3)做审计,跟踪表上所做的数据操作等.4)数据的备份和同步

触发器语法:

CREATE  [or REPLACE] TRIGGER  触发器名
   {BEFORE | AFTER}
   {DELETE | INSERT | UPDATE [OF 列名]}
   ON  表名
   [FOR EACH ROW [WHEN(条件) ] ]
PLSQL 块

触发语句与伪记录变量的值:

触发语句

:old

:new

Insert

全部字段都是空(null)

将要插入的数据

Update

更新曾经该行的值

更新后的值

delete

删除曾经该行的值

全部字段都是空(null)


案例1:限制非工作时间向数据库插入数 周六 周日 以及工作时间的非8点到18点的时间段是不能够在emp2表中插入数据的!

create or replace
trigger myTrigger
before insert on emp2
begin
  if to_char(sysdate,'day') in('星期六','星期日') or
  to_number(to_char(sysdate,'hh24')) not between 8 and 18 then
  raise_application_error(-20001,'不能在飞工作时间插入数据');
  end if;
end;


案例二: 确认数据(检查emp表中sal 的改动值不低于原值)也就是说你仅仅能给员工涨工资儿不能减工资!

create or replace
trigger checkSal
before update of sal on emp2
for each row 
declare
begin
  if :new.sal<:old.sal then
  raise_application_error(-20002,'更新薪水比之前的小。');
  end if;
end;


转载于:https://www.cnblogs.com/mfmdaoyou/p/6868099.html

最后

以上就是幸福抽屉为你收集整理的oracle 学习笔记之触发器的全部内容,希望文章能够帮你解决oracle 学习笔记之触发器所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(80)

评论列表共有 0 条评论

立即
投稿
返回
顶部