【Oracle】触发器最系统入门学习指导
前言:通过本次学习您可以学到什么
目录:
一、什么是触发器?
二、触发器的应用场景是什么?
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】触发器最系统入门学习指导相关推荐
- 分享:嵌入式Linux入门学习指导
很多嵌入式linux初学者对嵌入式linux学习十分迷茫,不知道该怎么一步步学习,嵌入式linux学习方法,学习的流程步骤以及学习过程中需要看哪些好的书籍.下面凌阳教育嵌入式培训网就为大家整理的嵌入式 ...
- C++程序员学习发展方向分析和指导(C++入门学习指导建议必看)
一路走来,磕磕碰碰,走到现在,历经了千辛万苦,可是路才刚刚开始走,未来还很长,我将会不断的思考和探索. 我想,如果是打算走进C++编程的同志们,请好好看完这篇文章,或许,对你的发展有所启发.但是,不要 ...
- LINUX KALI初级渗透XP系统入门学习总结(一)
LINUX KALI在 Metasploit框架下初级渗透XP系统入门学习总结(一) Metasploit的辅助模块主要用于信息搜集阶段,功能包括扫描.口令猜解.敏感信息嗅探.FUZZ测试发掘漏洞.实 ...
- linux系统入门学习Linux认证:linux系统学习方法入门体
Linux认证考试:操作系统linux学习方法入门体 在学习linux的工程中,linux学习方法有很多种,这里是小编的学习,给大家拿出来分享一下, Linux!Linux只是个内核!这点很重要,你必 ...
- web前端学习文档 电子版_web前端小白系统入门学习
正文 互联网正在改变我们的生活,前端也成了很重要的岗位之一,许多人都往前端靠拢,可又无能为力,不知所措,首先我们说为什么在编程里,大家都倾向于往前端靠呢?原因很简单,那就是,在程序员的世界里,前端开发 ...
- 分享嵌入式入门学习指导
最近有好多同学在咨询嵌入式该怎么入门,应该怎么学习,有什么好的学习方法推荐,以及嵌入式入门的学习路线.今天我就带着大家的问题,一一为大家解决. 首先嵌入式门槛虽然较高,但也跟其他事物一样,并不是牢不可 ...
- oracle sql练习_SQL入门学习
练习一.数据库安装问题 1.如何验证mySQL数据库安装成功 2.如何使用客户端(navicat)连接到mySQL数据库? 1)启动安装好的navicat客户端软件 2)设置连接属性 点击" ...
- usb网络linux系统安装教程,Linux系统入门学习:如何在树莓派上安装USB网络摄像头...
Question: 我可以在树莓派上使用标准的USB网络摄像头么?我该如何检查USB网络摄像头与树莓派是否兼容?另外我该如何在树莓派上安装它? 如果你想在树莓上拍照或者录影,你可以安装树莓派的摄像头板 ...
- Linux系统入门学习:改变libvirt VM镜像的默认位置
提问: 我使用libvirt和virt-manager在我的Linux系统上创建虚拟机.我注意到虚拟机镜像位于/var/lib/libvirt/p_w_picpaths目录.有没有办法改变虚拟机镜像的 ...
最新文章
- AI:2021年WAIC世界人工智能大会2021年7月9日《可信AI论坛》、《AI引领探索保险科技新价值》、《产研共育·数智未来》等论坛演讲内容分享及解读
- 0x80070003系统找不到指定路径_Win7系统中gpedit.msc找不到应该如何解决?
- python的ogr模块_python GDAL/OGR模块安装注意事项
- Linux(Ubuntu 16) 下Java开发环境的配置(二)------Tomcat的配置及常见问题
- python raise语句_Python异常处理,告别xxxxError!
- C++_类和对象_C++多态_案例2_制作饮品---C++语言工作笔记073
- openstack token
- g ++在linux下编译rapidxml 使用与过程中出现的问题解决
- Python自制成语接龙小游戏
- 汽车CAN总线 CAN2.0
- 零基础CSS入门教程(28)–CSS导航栏实例
- 并行计算、分布式计算、网格计算讲解
- 药店不停业盘点操作流程,海典盘点机PDA操作使用说明
- 如何在H5页面中实现长按二维码关注微信公众号?
- 电子商务系统需求分析
- 开启codelite的c++11
- idea中使用log4j(打开、关闭日志方法)
- 全国计算机等级考试三级数据库技术
- FH30502输入3.7V升5V电流3A-5A同步整流升压芯片
- 红米note+开机+android,红米note清除数据进入方法 红米note三清教程