首先创建一张表,用于保存薪资变化情况:

--创建加薪记录表
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】触发器示例:记录加薪的更多相关文章

  1. Oracle数据库之PL/SQL触发器

    Oracle数据库之PL/SQL触发器 1. 介绍 触发器(trigger)是数据库提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是 ...

  2. ORACLE数据库之PL/SQL触发器、rownum、动态SQL、数据库之视图与索引

    WHEN子句说明触发约束条件.Condition为一个逻辑表达时,其中必须包含相关名称,而不能包含查询语句,也不能调用PL/SQL函数.WHEN子句指定的触发约束条件只能用在BEFORE和AFTER行 ...

  3. PL/SQL 触发器简介

    与公司同事交流了一下,得知触发器很少用.性能是一方面,主要是如果用太多触发器,可能到时你都不知道会有什么操作自动发生. 有些操作可以在程序中控制.例如在插入某个表时,写个log表的记录.这可以用触发器 ...

  4. ORACLE PL/SQL:触发器

    ORACLE PL/SQL 触发器 本篇主要内容如下: 8.1 触发器类型 8.1.1 DML触发器 8.1.2 替代触发器 8.1.3 系统触发器 8.2 创建触发器 8.2.1 触发器触发次序 8 ...

  5. PL/SQL学习笔记之记录

    一:记录 记录是一种高可以容纳不同数据类型的数据的数据结构. PL/SQL可以处理记录的以下几种类型: 基于数据表 基于游标的记录 用户自定义的记录 二:使用 %ROWTYPE属性 创建基于表格或基于 ...

  6. Oracle实战笔记(第六天)之PL/SQL基础

    一.PL/SQL介绍 1.概念 PL/SQL也是一种程序语言,叫做过程化SQL语言(Procedural Language/SQL).PL/SQL是Oracle数据库对SQL语句的扩展.在普通SQL语 ...

  7. Oracle PL/SQL中如何使用%TYPE和%ROWTYPE

    1. 使用%TYPE 在许多情况下,PL/SQL变量可以用来存储在数据库表中的数据.在这种情况下,变量应该拥有与表列相同的类型.例如,students表的first_name列的类型为VARCHAR2 ...

  8. oracle pl/sql 程序设计 历史笔记整理

    20131016 周三 oracle pl/sql 程序设计 第2章 创建并运行pl/sql代码 sqlplus yjkhecc/yjkhecc@10.85.23.92:1521/orcl 在java ...

  9. PL/sql语法单元

    1.字符集 PL/SQL的字符集包括: 所有大小写字母:包括A~Z和a~z. 数字:包括0~9. 空白字符:包括制表符.空格和回车符 其他常用英文符号 2.标识符 标识符用于定义PL/sql变量.常量 ...

  10. PL/SQL学习(三)游标

    原文参考:http://plsql-tutorial.com/ 两种类型:     隐式:         执行INSERT.UPDATE.DELETE 或者只返回一条结果的SELECT语句时默认创建 ...

随机推荐

  1. ACM 数学

    欧几里得辗转相除法求最大公约数 int gcd(int a,int b) { ) return a; else return gcd(b,a%b); } 求组合数 int C(int n ,int m ...

  2. 浪潮服务器装机RAID

    下面是在装浪潮服务器NF8480M5收集的资料,但是NF8480M5服务器没有网上说的webBIOS界面需要按住DEL进BIOS,将启动都禁止了再重启,进入页面配置. http://blog.51ct ...

  3. codevs——2645 Spore

    2645 Spore  时间限制: 1 s  空间限制: 32000 KB  题目等级 : 钻石 Diamond 题解       题目描述 Description 某陈和某Y 最近对一个游戏着迷.那 ...

  4. MS SQL SERVER 书BOOK

    http://www.cnblogs.com/lyhabc/p/4833248.html

  5. [Vue @Component] Pass Props to Vue Functional Templates

    Functional templates allow you to create components consisting of only the template tag and exposing ...

  6. OCX 打包 CAB 与 JS 调用具体教程

        近期在做一个 WEB 项目.须要调用 OCX 进行连接读卡器读卡.本来并不想用 OCX 技术.由于 ActiveX 技术是微软出品.这样就导致整个系统仅仅能使用 IE 浏览器(其它浏览器能够通 ...

  7. Android开发:Eclipse中SqliteManager插件使用

    通常开发Android的时候要使用到数据库操作,会遇到下面小问题: 数据库文件在哪?怎样訪问或操作? 能够通过:打开DDMS->File Explorer看到的sqlite数据库在eclipse ...

  8. TomCatserver的安装,环境的配置,服务的启动以及验证---ShinePans

    首先下载 TomCat 6: http://yunpan.cn/cg5icf3dha4k3  提取码 34c5 然后配置环境变量: 电脑>>>属性>>>高级系统设置 ...

  9. Ubuntu下安装C/C++开发环境【!!!有更新!!!Ubuntu14.10下使用eclipse搭建C语言开发环境】

    (1)第一步安装Eclipse,有两种方法,使用软件市场搜索就可以得到,安装就可以 另外一种是使用终端安装,命令例如以下: sudo su进入root模式 输入password 然后 输入:sudo ...

  10. 自己动手写reg注册表文件

    自己动手写reg注册表文件 2015-01-12 20:23 1161人阅读 评论(1) 收藏 举报  分类: 玩转Windows应用层编程(12)  版权声明:本文为博主原创文章,未经博主允许不得转 ...