【PL/SQL】触发器示例:记录加薪
首先创建一张表,用于保存薪资变化情况:
--创建加薪记录表
CREATE TABLE scott.raisedsalarylog
(
empno NUMBER(10) NOT NULL PRIMARY KEY, --员工编号
raiseddate DATE, --加薪日期
originalsal NUMBER(10,2), --加薪前薪资
raisedsal NUMBER(10,2) --加薪后薪资
);
创建触发器,当emp表中sal发生变化,就把变化记录到raisedsalarylog表中:
--定义触发器
CREATE OR REPLACE TRIGGER SCOTT.RAISESALARYCHANGE
--定义AFTER触发器,监测emp表的SAL列的更新
AFTER UPDATE OF SAL ON SCOTT.EMP
--定义行级触发器
FOR EACH ROW
--声明区
DECLARE
V_COUNT INT; --定义记录个数变量
BEGIN
--查询更新薪资的员工在raisesalarylog表中是否存在
SELECT COUNT(*)
INTO V_COUNT
FROM SCOTT.RAISEDSALARYLOG
WHERE EMPNO = :OLD.EMPNO;
IF V_COUNT = 0
--如果不存在,则插入新的记录
THEN
INSERT INTO SCOTT.RAISEDSALARYLOG
VALUES
(:OLD.EMPNO, SYSDATE, :OLD.SAL, :NEW.SAL);
ELSE
--如果存在,则更新记录
UPDATE SCOTT.RAISEDSALARYLOG
SET RAISEDDATE = SYSDATE,
ORIGINALSAL = :OLD.SAL,
RAISEDSAL = :NEW.SAL
WHERE EMPNO = :OLD.EMPNO;
END IF;
--如果出现错误,则打印出来
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(SQLERRM);
END;
验证触发器:
SQL> update emp set sal=sal*1.12 where empno=7369;
1 row updated
SQL> select * from scott.raisedsalarylog;
EMPNO RAISEDDATE ORIGINALSAL RAISEDSAL
----------- ----------- ------------ ------------
7369 2017/8/15 1 800.00 896.00
The End!
2017-08-15
【PL/SQL】触发器示例:记录加薪的更多相关文章
- Oracle数据库之PL/SQL触发器
Oracle数据库之PL/SQL触发器 1. 介绍 触发器(trigger)是数据库提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是 ...
- ORACLE数据库之PL/SQL触发器、rownum、动态SQL、数据库之视图与索引
WHEN子句说明触发约束条件.Condition为一个逻辑表达时,其中必须包含相关名称,而不能包含查询语句,也不能调用PL/SQL函数.WHEN子句指定的触发约束条件只能用在BEFORE和AFTER行 ...
- PL/SQL 触发器简介
与公司同事交流了一下,得知触发器很少用.性能是一方面,主要是如果用太多触发器,可能到时你都不知道会有什么操作自动发生. 有些操作可以在程序中控制.例如在插入某个表时,写个log表的记录.这可以用触发器 ...
- ORACLE PL/SQL:触发器
ORACLE PL/SQL 触发器 本篇主要内容如下: 8.1 触发器类型 8.1.1 DML触发器 8.1.2 替代触发器 8.1.3 系统触发器 8.2 创建触发器 8.2.1 触发器触发次序 8 ...
- PL/SQL学习笔记之记录
一:记录 记录是一种高可以容纳不同数据类型的数据的数据结构. PL/SQL可以处理记录的以下几种类型: 基于数据表 基于游标的记录 用户自定义的记录 二:使用 %ROWTYPE属性 创建基于表格或基于 ...
- Oracle实战笔记(第六天)之PL/SQL基础
一.PL/SQL介绍 1.概念 PL/SQL也是一种程序语言,叫做过程化SQL语言(Procedural Language/SQL).PL/SQL是Oracle数据库对SQL语句的扩展.在普通SQL语 ...
- Oracle PL/SQL中如何使用%TYPE和%ROWTYPE
1. 使用%TYPE 在许多情况下,PL/SQL变量可以用来存储在数据库表中的数据.在这种情况下,变量应该拥有与表列相同的类型.例如,students表的first_name列的类型为VARCHAR2 ...
- oracle pl/sql 程序设计 历史笔记整理
20131016 周三 oracle pl/sql 程序设计 第2章 创建并运行pl/sql代码 sqlplus yjkhecc/yjkhecc@10.85.23.92:1521/orcl 在java ...
- PL/sql语法单元
1.字符集 PL/SQL的字符集包括: 所有大小写字母:包括A~Z和a~z. 数字:包括0~9. 空白字符:包括制表符.空格和回车符 其他常用英文符号 2.标识符 标识符用于定义PL/sql变量.常量 ...
- PL/SQL学习(三)游标
原文参考:http://plsql-tutorial.com/ 两种类型: 隐式: 执行INSERT.UPDATE.DELETE 或者只返回一条结果的SELECT语句时默认创建 ...
随机推荐
- ACM 数学
欧几里得辗转相除法求最大公约数 int gcd(int a,int b) { ) return a; else return gcd(b,a%b); } 求组合数 int C(int n ,int m ...
- 浪潮服务器装机RAID
下面是在装浪潮服务器NF8480M5收集的资料,但是NF8480M5服务器没有网上说的webBIOS界面需要按住DEL进BIOS,将启动都禁止了再重启,进入页面配置. http://blog.51ct ...
- codevs——2645 Spore
2645 Spore 时间限制: 1 s 空间限制: 32000 KB 题目等级 : 钻石 Diamond 题解 题目描述 Description 某陈和某Y 最近对一个游戏着迷.那 ...
- MS SQL SERVER 书BOOK
http://www.cnblogs.com/lyhabc/p/4833248.html
- [Vue @Component] Pass Props to Vue Functional Templates
Functional templates allow you to create components consisting of only the template tag and exposing ...
- OCX 打包 CAB 与 JS 调用具体教程
近期在做一个 WEB 项目.须要调用 OCX 进行连接读卡器读卡.本来并不想用 OCX 技术.由于 ActiveX 技术是微软出品.这样就导致整个系统仅仅能使用 IE 浏览器(其它浏览器能够通 ...
- Android开发:Eclipse中SqliteManager插件使用
通常开发Android的时候要使用到数据库操作,会遇到下面小问题: 数据库文件在哪?怎样訪问或操作? 能够通过:打开DDMS->File Explorer看到的sqlite数据库在eclipse ...
- TomCatserver的安装,环境的配置,服务的启动以及验证---ShinePans
首先下载 TomCat 6: http://yunpan.cn/cg5icf3dha4k3 提取码 34c5 然后配置环境变量: 电脑>>>属性>>>高级系统设置 ...
- Ubuntu下安装C/C++开发环境【!!!有更新!!!Ubuntu14.10下使用eclipse搭建C语言开发环境】
(1)第一步安装Eclipse,有两种方法,使用软件市场搜索就可以得到,安装就可以 另外一种是使用终端安装,命令例如以下: sudo su进入root模式 输入password 然后 输入:sudo ...
- 自己动手写reg注册表文件
自己动手写reg注册表文件 2015-01-12 20:23 1161人阅读 评论(1) 收藏 举报 分类: 玩转Windows应用层编程(12) 版权声明:本文为博主原创文章,未经博主允许不得转 ...