前言:通过本次学习您可以学到什么


目录:

一、什么是触发器?

二、触发器的应用场景是什么?

  1、复杂的安全性检查

  2、数据的确认

  3、实现审计功能

  4、完成数据的备份和同步

三、触发器的语法是什么?

四、触发器的类型有哪些?

  1、语句级的触发器

  2、行级的触发器

五、案例介绍

----------------------------------------------------------------------------------------------

一、什么是触发器?

每当一个特定的数据操作语句(insert、update、delete)在指定的表上发出时,Oracle自动地执行触发器中定义的语句序列。

注意select语句不在上述的操作范围内。

第一个触发器:每当成功插入新员工信息后,自动打印“成功插入新员工”。

如何创建触发器

create trigger savenewemp

after insert

on emp

declare

begin

dbms_output.put_line( '成功插入新员工' );

end;

/

这个oracle中的触发器就非常类似于我们熟悉的java中的监听器。

二、触发器的应用场景是什么?

1、复杂的安全性检查

当我们需要安全性策略的时候,比如周末禁止操作数据库等。

2、数据的确认

比如我们涨工资的时候,如果工资变少了,就可以用触发器进行确认。

3、实现审计功能

跟踪表上所做的数据操作,目前也在oracle中单独实现,也可以用触发器实现,这种审计叫做基于值的审计

4、完成数据的备份和同步

三、触发器的语法是什么?

上面我们漏提到了一句语法:[For each row[when(条件)]]

首先我们需要先了解触发器的类型,如果有上面这句[For each row[when(条件)]]的话,那他就是行级触发器。

四、触发器的类型有哪些?

语句级触发器:在指定的操作语句操作之前或者之后执行一次,不管这条语句影响了多少行。

针对的是表。

行级触发器:触发语句作用的每一条记录都被触发,在行级触发器中我们使用:old和:new伪记录变量,识别值得状态。

针对的是行。

五、触发器的应用场景 

1、复杂的安全性检查

实施复杂的安全性检查:禁止在非工作时间插入新员工。

/*

1、周末:to_char(sysdate,'day') in ('星期六','星期日')

2、上班前(9),下班后(18):to_number(to_char(sysdate,'hh24')) not between 9 and 18

*/

create or replace trigger securityemp

before insert

on emp

declare

begin

if to_char(sysdate,'day') in ('星期六','星期日')

or to_number(to_char(sysdate,'hh24')) not between 9 and 18

then

-- 禁止insert新员工

raise_application_error(-20001,'禁止在非工作时间插入新员工!');

end;

/

注意,上面的raise_application_error函数中的第一个参数的值范围是-20000~-29999

上面这个例子就是针对表的一个操作,所以没有[For each row[when(条件)]]

  2、数据的确认

涨工资不能越涨越少,每一条记录都需要检查,必然这个触发器是行级触发器。

/*

涨后的薪水不可以少于涨前的薪水

1、:old \ :new :代表的是同一条记录。

2、:old :表示操作该行之前,这一行的值。

3、:new :标示操作该行之后,这一行的值。

*/

create or replace trigger checksalary

before update

on emp

for each row

begin

--涨后的薪水不可以少于涨前的薪水

--if 涨后薪水<涨前薪水 then

if :new.sal < :old.sal then

raise_application_error(-20002,'涨后的薪水不可以少于涨前的薪水!');

end if;

end;

/

上面这个例子就是针对每一行的一个操作,所以有[For each row[when(条件)]]

  3、实现审计功能

创建基于值得触发器

/*

数据库的审计---》基于值得审计功能

给员工涨工资,当涨后的工资超过6000元的时候,审计该员工的信息。

*/

--创建表,用于保存审计信息

create table audit_info

(

information varchar2(200)

)

create or replace trigger do_audit_emp_salary

after update

on emp

for each row

declare

begin

--当涨后的薪水大于6000,插入审计信息

if :new.sal > 6000 then

insert into audit_info values(:new.empno|| '  '|| :new.ename||'  '||:new.sal);

end if;

end;

/

上面这个例子就是针对每一行的一个操作,所以有[For each row[when(条件)]]

  4、完成数据的备份和同步

利用触发器实现数据的备份和同步:同步备份,没有延时。

分布式数据库。

/*

数据的备份和同步

当给员工涨完工资后自动备份新的工资到备份表中。

这是一个行级触发器。

*/

create or replace trigger sync_salary

after update

on emp

for each row

begin

--当主表更新后,自动更新备份表

update emp_back set sal=:new.sal where empno=:new.empno;

end;

/

上述是同步备份,若无网络压力,则无延迟。

下面还有一种快照备份我们不做详述。

本章小结,希望对您有所帮助:

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

四个场景:

1、复杂的安全性检查

2、数据的确认

3、数据库的审计

4、数据的备份和同步


【Oracle】触发器最系统入门学习指导相关推荐

  1. 分享:嵌入式Linux入门学习指导

    很多嵌入式linux初学者对嵌入式linux学习十分迷茫,不知道该怎么一步步学习,嵌入式linux学习方法,学习的流程步骤以及学习过程中需要看哪些好的书籍.下面凌阳教育嵌入式培训网就为大家整理的嵌入式 ...

  2. C++程序员学习发展方向分析和指导(C++入门学习指导建议必看)

    一路走来,磕磕碰碰,走到现在,历经了千辛万苦,可是路才刚刚开始走,未来还很长,我将会不断的思考和探索. 我想,如果是打算走进C++编程的同志们,请好好看完这篇文章,或许,对你的发展有所启发.但是,不要 ...

  3. LINUX KALI初级渗透XP系统入门学习总结(一)

    LINUX KALI在 Metasploit框架下初级渗透XP系统入门学习总结(一) Metasploit的辅助模块主要用于信息搜集阶段,功能包括扫描.口令猜解.敏感信息嗅探.FUZZ测试发掘漏洞.实 ...

  4. linux系统入门学习Linux认证:linux系统学习方法入门体

    Linux认证考试:操作系统linux学习方法入门体 在学习linux的工程中,linux学习方法有很多种,这里是小编的学习,给大家拿出来分享一下, Linux!Linux只是个内核!这点很重要,你必 ...

  5. web前端学习文档 电子版_web前端小白系统入门学习

    正文 互联网正在改变我们的生活,前端也成了很重要的岗位之一,许多人都往前端靠拢,可又无能为力,不知所措,首先我们说为什么在编程里,大家都倾向于往前端靠呢?原因很简单,那就是,在程序员的世界里,前端开发 ...

  6. 分享嵌入式入门学习指导

    最近有好多同学在咨询嵌入式该怎么入门,应该怎么学习,有什么好的学习方法推荐,以及嵌入式入门的学习路线.今天我就带着大家的问题,一一为大家解决. 首先嵌入式门槛虽然较高,但也跟其他事物一样,并不是牢不可 ...

  7. oracle sql练习_SQL入门学习

    练习一.数据库安装问题 1.如何验证mySQL数据库安装成功 2.如何使用客户端(navicat)连接到mySQL数据库? 1)启动安装好的navicat客户端软件 2)设置连接属性 点击" ...

  8. usb网络linux系统安装教程,Linux系统入门学习:如何在树莓派上安装USB网络摄像头...

    Question: 我可以在树莓派上使用标准的USB网络摄像头么?我该如何检查USB网络摄像头与树莓派是否兼容?另外我该如何在树莓派上安装它? 如果你想在树莓上拍照或者录影,你可以安装树莓派的摄像头板 ...

  9. Linux系统入门学习:改变libvirt VM镜像的默认位置

    提问: 我使用libvirt和virt-manager在我的Linux系统上创建虚拟机.我注意到虚拟机镜像位于/var/lib/libvirt/p_w_picpaths目录.有没有办法改变虚拟机镜像的 ...

最新文章

  1. AI:2021年WAIC世界人工智能大会2021年7月9日《可信AI论坛》、《AI引领探索保险科技新价值》、《产研共育·数智未来》等论坛演讲内容分享及解读
  2. 0x80070003系统找不到指定路径_Win7系统中gpedit.msc找不到应该如何解决?
  3. python的ogr模块_python GDAL/OGR模块安装注意事项
  4. Linux(Ubuntu 16) 下Java开发环境的配置(二)------Tomcat的配置及常见问题
  5. python raise语句_Python异常处理,告别xxxxError!
  6. C++_类和对象_C++多态_案例2_制作饮品---C++语言工作笔记073
  7. openstack token
  8. g ++在linux下编译rapidxml 使用与过程中出现的问题解决
  9. Python自制成语接龙小游戏
  10. 汽车CAN总线 CAN2.0
  11. 零基础CSS入门教程(28)–CSS导航栏实例
  12. 并行计算、分布式计算、网格计算讲解
  13. 药店不停业盘点操作流程,海典盘点机PDA操作使用说明
  14. 如何在H5页面中实现长按二维码关注微信公众号?
  15. 电子商务系统需求分析
  16. 开启codelite的c++11
  17. idea中使用log4j(打开、关闭日志方法)
  18. 全国计算机等级考试三级数据库技术
  19. FH30502输入3.7V升5V电流3A-5A同步整流升压芯片
  20. 红米note+开机+android,红米note清除数据进入方法 红米note三清教程

热门文章

  1. Linux定时任务服务crond
  2. 【移动开发】Android应用程序中实用的代码框架(一)
  3. linux下创建和删除目录
  4. Android Studio获得sha1码
  5. OpenJudge 2739 计算对数
  6. NHibernate 与Oracle 点滴
  7. DKhadoop安装配置教程与常见问题解决方法
  8. 吓尿了!手机充完电不拔充电器后果这么严重
  9. 英特尔裁员1.2万 CEO还在涨薪?
  10. git 几种情况的回滚