【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语句时默认创建 ...
随机推荐
- A+B Problem IV
描述acmj最近发现在使用计算器计算高精度的大数加法时很不方便,于是他想着能不能写个程序把这个问题给解决了. 输入 包含多组测试数据每组数据包含两个正数A,B(可能为小数且位数不大于400) 输出 ...
- Android GIS开发系列-- 入门季(4) GraphicsLayer的点击查询要素
上一讲中我们学会了如何在MapView中添加Graphic要素,那么在百度或高德地图中,当我们点击要素时,会显示出相应的详细信息.在GraphicsLayer中也提供了这样的方法.下面我们来学习在Gr ...
- php 类型转换
PHP数据类型转换 PHP的数据类型转换属于强制转换,允许转换的PHP数据类型有: •(int).(integer):转换成整形 •(float).(double).(real):转换成浮点型 •(s ...
- Shine.js实现动态阴影效果
Shine.js 是一个用于实现美丽阴影的 JS 库. 特性 1.可动态旋转光的位置,投影出不同的阴影效果 2.可定制的阴影, 3.没有库依赖关系,AMD兼容使用基于内容的文本或框阴影 4.在浏览器支 ...
- Error处理: 重提No Launcher activity found!
Error处理: 重提No Launcher activity found! 重提No Launcher activity found!错误提示,及解决的方法 Android应用开发中No Launc ...
- MBLAST - BLAST
There are given two strings, A and B. An expansion of some string X is a string created by adding or ...
- 【转】Android进阶2之 阴影制作(Shadow)
阴影制作:包括各种形状(矩形,圆形等等),以及文字等等都能设置阴影. 阴影制作是什么原理呢? 其实很简单,你需要设置阴影的东西被看作一个主层.然后在主层下面画一个阴影层. 阴影制作涉及到一个重要函数: ...
- Linux下的IPC-UNIX Domain Socket【转】
本文转载自:http://blog.csdn.net/guxch/article/details/7041052 一. 概述 UNIX Domain Socket是在socket架构上发展起来的用于同 ...
- bzoj2538: [Ctsc2000]公路巡逻
超车这个东西这么恶心肯定是要暴力求的(自圆其说) 那么分成一个个时间段来搞,然后DP一下 化一下那个速度,耗费时间是在300s~600s之间的 那我们就可以设f[i][j]为走到第i个位置用了j的时间 ...
- 第一周 Leetcode 57. Insert Interval (HARD)
Insert interval 题意简述:给定若干个数轴上的闭区间,保证互不重合且有序,要求插入一个新的区间,并返回新的区间集合,保证有序且互不重合. 只想到了一个线性的解法,所有区间端点,只要被其 ...