3. 触发器的使用和案例
文章目录
- 触发器
- 1. 触发器简介
- 1.1 什么是触发器
- 1.2 触发器的应用场景
- 1.3 触发器的语法
- 1.4 触发器的类型
- 2. 第一个触发器
- 2.1 创建触发器
- 3. 案例一:实施复杂的安全性检查-禁止在非工作时间插入新用户
- 4. 案例二:数据的确认-涨工资,涨后的薪水不能低于涨前的薪水
- 5. 案例三:数据库的审计-给员工涨工资,当工资超过6000时,保存数据到另一张表作为审计
- 6. 案例四:数据的备份和同步-利用触发器实现数据同步
触发器
1. 触发器简介
1.1 什么是触发器
数据库触发器是一个与表相关联的、存储的PL/SQL程序。
每当一个特定的数据操作语句(insert,update,delete)在指定的表上发出时,Oracle自动的执行触发器中定义的语句序列。
1.2 触发器的应用场景
1.复杂的安全性检查
2.数据确认
3.实现审计功能
4.完成数据的备份和同步
1.3 触发器的语法
pl/sql语法
1.4 触发器的类型
语句级触发器:(针对是表)在指定的操作语句操作之前或者操作之后执行一次,不管这条语句执行了多少行。
行级触发器: (针对一行)触发语句作用的每一条记录都被触发,在行级触发器中使用:old和:new伪记录变量,识别值的状态。
2. 第一个触发器
需求:每当成功插入一条数据,自动打印“成功增加一位用户”
2.1 创建触发器
语法
CREATE [OR REPLACE] TRIGGER 触发器名称
-- 操作之前/之后
{BEFORE | AFTER}
--操作属性,更新可以指定列名
{DELETE | INSERT | UPDATE [OF 列名]}
ON 表名
-- 如果存在这条语句,就是行级触发器,否则为语句触发器
[FOR EACH ROW[WHEN(条件)]]
PLSQL块
案例
-- TRIGGER关键字
CREATE OR REPLACE TRIGGER INSERTNEWITEM
-- 插入之后操作,需要指明表
AFTER INSERT ON YSTEXT
--开头
DECLARE
BEGINDBMS_OUTPUT.PUT('成功增加一位用户');
END;
运行
结果
3. 案例一:实施复杂的安全性检查-禁止在非工作时间插入新用户
触发器应用场景一:实施复杂的安全性检查
禁止在非工作时间插入新用户
条件
1.非工作时间1.周六日:to_char(sysdate,'day') in ('星期六','星期日')2.上班前/下班后:
2.语句级触发器,针对表
代码
create or replace TRIGGER ADDUSERINFO
BEFORE INSERT ON YSTEXT
BEGIN--设置条件IF to_char(SYSDATE,'day') in ('星期六','星期日') OR TO_NUMBER(to_char(SYSDATE, 'hh24')) not between 9 and 18THEN--禁止插入新员工 --这里使用抛出异常的方法,参数1为异常号,规定范围在-20000 到 -20999,第二个参数为错误信息RAISE_APPLICATION_ERROR(-20001, '禁止在非工作时间插入用户信息');END IF;
END;
结果
4. 案例二:数据的确认-涨工资,涨后的薪水不能低于涨前的薪水
触发器应用场景二:数据的确认
涨工资,涨后的薪水不能低于涨前的薪水
条件
1.行级触发器,针对每条数据
2. :old 和 :new 代表同一条记录
3. :old 表示操作该行之前,这一行的值
4. :new 表示操作该行之后,这一行的值
代码
create or replace TRIGGER CHECKMONEY
BEFORE UPDATE ON YSTEXTFOR EACH ROW
BEGINIF :new.money < :old.moneyTHENRAISE_APPLICATION_ERROR(-20002, '涨后的工资不能小于涨前的工资,涨后的薪水'||:new.money ||'涨前的薪水'||:old.money);END IF;
END;
结果
5. 案例三:数据库的审计-给员工涨工资,当工资超过6000时,保存数据到另一张表作为审计
数据库的审计
给员工涨工资,当工资超过6000时,保存数据到另一张表作为审计
条件
1.行级触发器
代码
--案例三数据库的审计
--给员工涨工资,当工资超过6000时,保存数据到另一张表作为审计
CREATE OR REPLACE TRIGGER AUDITMONEY
BEFORE UPDATE ON YSTEXT
FOR EACH ROW
BEGIN--当涨后的薪水大于6000,插入信息到审计表IF :new.money > 6000 THENINSERT INTO AUDIT_INFO("ID", "NAME", "MONEY") VALUES (:new.id,:new.name,:new.money);END IF;
END;
执行update
UPDATE YS.YSTEXT SET MONEY = MONEY-3000
结果:审计表插入一条数据
6. 案例四:数据的备份和同步-利用触发器实现数据同步
数据的备份和同步
利用触发器实现数据同步,当给员工涨完工资之后,自动备份新的工资到备份表中
条件
1.行级触发器
代码
CREATE OR REPLACE TRIGGER BACK_YSTEXT
BEFORE UPDATE ON YSTEXT
FOR EACH ROW
BEGIN--当主表更新后,自动更新备份表UPDATE ystext_back SET money = :new.money where id = :new.id;
END;
源表起始数据
目标表起始数据
运行
源表结果数据
目标表结果数据
3. 触发器的使用和案例相关推荐
- oracle触发器记录所有dml,Oracle DML类型触发器
Oracle DML类型触发器 Oracle DML类型触发器是Oracle开发过程当中最经常用到,也是最常见的触发器,主要是对DML操作,如:insert.delete.update操作事件进行触发 ...
- PostgreSQL 30天 培训视频(SQL基础,备份恢复,HA,服务端编程,大数据,内核,应用案例)
Postgres2015全国用户大会将于11月20至21日在北京丽亭华苑酒店召开.本次大会嘉宾阵容强大,国内顶级PostgreSQL数据库专家将悉数到场,并特邀欧洲.俄罗斯.日本.美国等国家和地区的数 ...
- oracle 触发器管理(以及行级触发器中有两个伪变量 :new 与 :old 的使用方法)(三个谓词inserting、deleting、updating的使用方法)
oracle触发器管理: 1.概念 2.建立一个简单的触发器: 3.触发器的作用 4.触发条件 a.触发事件 b.触发时间 c.触发级别 d.触发限制 e.触发对象 5.创建及使用触发器 6.触发器分 ...
- oracle触发器报错语法,Oracle 触发器
Oracle触发器是使用者对Oracle数据库的对象做特定的操作时,触发的一段PL/SQL程序代码,叫做触发器.触发的事件包括对表的DML操作,用户的DDL操作以及数据库事件等. 一.触发器的作用 O ...
- Mysql系列之六(视图,事务,触发器等)
视图 1.什么是视图 视图就是通过查询一张表储存起来,下次可以接着用 2.为什么要用视图 如果要频繁的使用一张虚拟表,你可以制作成视图,后续直接使用 3.如何操作 # 固定语法 create view ...
- 数据库触发器调用python_数据库——触发器
触发器 使用触发器可以定制用户对表进行[增,删,改]操作时前后的行为. 当我们想要在一个表记录被更新时做一些操作时就可以使用触发器 但是我们完全可以在python中来完成这个事情,因为python的扩 ...
- postgresql最全整理资料,PostgreSQL 30天 培训视频(SQL基础,备份恢复,HA,服务端编程,大数据,内核,应用案例)
转载自:http://blog.163.com/digoal@126/blog/static/16387704020141229159715/ 希望通过这些视频帮到一些朋友, 同时对视频中的错误点烦请 ...
- FPGA从Xilinx的7系列学起(6)
用户必须要认识到,学习一下技巧可以让更多的逻辑放在更少的Slice中,使工具能够达到既实现设计时序要求又满足用户对功耗的要求.而现在很多用户缺乏代码编写的想法,编写出一个有时序问题的设计.为了满足要求 ...
- 自动化运维专题之zabbix课程内容大纲
一.监控系统概述 1.1 网络监控概述 1.2 SNMP协议概述 1.2.1 SNMP协议框架 1.2.2 SNMP协议基本工作原理 1.3 监控系统实现目标 1.3.1 数据收集 1.3.2 数据存 ...
最新文章
- 公司CRM的三个阶段
- 【转】Nginx系列(五)--nginx+tomcat实现负载均衡
- Linux下往移动硬盘拷贝数据步骤方式
- Elasticsearch Grok Pattern内置表达式大全
- 大工13秋《专业英语(计算机英语)》在线测试2,大工13秋《专业英语(计算机英语)》在线测试2答案...
- 1470. Shuffle the Array
- 解决devenv.exe应用程序错误,应用程序发生异常
- [TJOI2015]线性代数(最小割)
- N1CTF 塞题vote分析
- 程序员进阶之路:四个程序员职业阶段,通常对应不同的薪资待遇!
- 国土空间规划的体系和内容
- Jmeter 的json Extractor
- 7.数据结构 --- 图
- 埃斯顿三轴机器人编程_一文了解Estun Studio机器人仿真与离线编程软件
- 如何清洁Mac的屏幕
- 带你逐步深入了解SSM框架——淘淘商城项目之redis缓存
- 编程制作动态壁纸的思路_Android应用源码动态壁纸开发必看例子源码
- 康托展开及其逆运算 详解
- 电脑公司 雨林.番茄.深度.龙帝国.系统之家.系统光盘收录大全
- 倚天屠龙记(函数模板)
热门文章
- 北京信息科技大学第十一届程序设计竞赛(重现赛)H	andy和购物
- Python数据可视化 Pyecharts 制作 Calendar 日历热图
- UVM:11 OVM 到UVM 的迁移
- P2P 终结者 for Linux
- 求时滞反应扩散方程(纽曼边界条件的)的matlab代码
- 解决ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
- android 8.0模拟点击,安卓8.0能用的模拟器
- Android中静态方式破解某App实现所有视频app去除广告功能
- c语言中的头文件stdlib.h的作用,c语言includestdlib.h什么意思?
- 傲腾内存 可以用ghost系统_创新无止境!英特尔2020继续用“芯”改变世界