一.触发器的作用

  触发器的作用类似拦截器.把一些针对数据库的DML操作(insert/update/delete/select)进行拦截,符合业务要求的进行操作,不符合要求的操作可以通过抛出异常来阻止

  说白了就是数据确认(after)与安全性检查(before),此外触发器不针对select操作

二.触发器的使用

  语法不再赘述,百度或者查阅oracle的文档都能找到

  以下的一些例子是基于scott用户下的emp表

1.创建语句级触发器insertEmpTrigger,当对表【emp】进行增加【insert】操作前【before】,显示'插入了一条数据'

注意是单引号

 --创建触发器
create or replace trigger insert_trigger
before
insert
on emp
for each row
begin
dbms_output.put_line('插入了一条数据');
end;
/

如果不加for each row即使一次插入多条数据,触发器仍然只工作一次(普通的语句触发器),for each row 使得这个触发器变成了一个行触发器

2.星期一到星期五,且9-21点能向数据库emp表插入数据,否则使用函数抛出异常,使用:raise_application_error('-20000','例外原因')

说明:raise_application_error(error_number,error_message) 用于抛出自定义的异常 error_number为-20000 到 -20999 之间,error_message表示错误的信息

注意:不能仅仅用整点来控制,必须要考虑分钟的问题

 create or replace trigger security_trigger
before
insert
on emp
for each row
declare
pday varchar2(10);
phour number(2);
begin
select to_char(sysdate,'day') into pday from dual;
select ceil(to_char(sysdate,'hh24.mi')) into phour from dual;
if pday in ('星期六','星期日') or phour not between 9 and 21 then
raise_application_error('-20000','非工作日不能插入数据');
end if;
end;
/

触发器创建之后,在周一的 21:57时已经不能插入数据

3.创建行级触发器checkSalaryTrigger,涨后工资这一列,确保大于涨前工资(10%) (:new.sal/:old.sal的使用)

:new.列名 与:old.列名 分别表示 某列的新值与旧值,而且这两个变量只有在创建触发器时加上for each row才会出现

 此外update二者皆有,insert只有:new,delete只有:old(上面已经说过,触发器不针对select操作)

 create or replace trigger checkSalary_trigger
after
update
on emp
for each row
begin
-- 伪变量:new.sal表示更新后的sal字段
-- 10% 要写成 0.1
if (:new.sal - :old.sal) < :old.sal*0.1 then
raise_application_error('-20000','工资涨幅必须大于10%');
else
dbms_output.put_line('更新成功!');
end if;
end;
/

Oracle 触发器的使用的更多相关文章

  1. 2014/11/06 Oracle触发器初步 2014-11-06 09:03 49人阅读 评论(0) 收藏

    触发器我就不多解释了,保证数据的完整性的神器,嗯..也是减少程序员工作托管给数据库操作的好帮手.就不讲一些大道理了.通俗点,我们对数据库的操作,无非就是增 删 改 查. 触发器就是在删,改,增的时候( ...

  2. oracle触发器加条件判断

    oracle触发器加条件判断,如果某个字段,isnode=0,那么不执行下面的方法,数据如下: create or replace trigger tr_basestation_insert_emp ...

  3. [转]连续创建多个Oracle触发器失败,单个创建才成功的解决方法

    连续创建多个Oracle触发器失败,单个创建才成功的解决方法   1.当我连续执行创建多个触发器时,总是报编译通过,但存在警告或错误.如下:   create or replace trigger t ...

  4. Oracle 触发器在日志管理开发中的应用

    摘要: 本文讨论了利用数据库中的触发器对日志管理进行设计与实现的方法, 是对原来在客户端软件中编写日志管理方法的一种改进, 并给出了 Oracle9i 中的实例演示.关键词: Oracle; 触发器; ...

  5. oracle触发器应用

    首先给大家推荐两篇我看后的博文,我已经内容转载过来: 1.对触发器的讲解 本篇主要内容如下: 8.1 触发器类型 8.1.1 DML触发器 8.1.2 替代触发器 8.1.3 系统触发器 8.2 创建 ...

  6. Mybatis 插入操作时获取主键 (Oracle 触发器与SEQ)

    1.通过Oracle序列 -- Create sequence create sequence SEQ_DW_EWSYSTEM minvalue 1 maxvalue 9999999999999999 ...

  7. SQL server与Oracle触发器的创建与使用

    SQL Server 1创建触发器 GO BEGIN IF (object_id('WMY', 'tr') is not null) DROP trigger WMY END; GO CREATE T ...

  8. oracle触发器中增删改查本表

    oracle触发器中增删改查本表 (1)只有before insert触发器中才可以查询或更新本表 create or replace trigger tri_test_ins before inse ...

  9. Oracle触发器用法实例详解

    转自:https://www.jb51.net/article/80804.htm. 本文实例讲述了Oracle触发器用法.分享给大家供大家参考,具体如下: 一.触发器简介 触发器的定义就是说某个条件 ...

  10. Oracle 触发器(二)

    Oracle触发器详解   触发器是许多关系数据库系统都提供的一项技术.在oracle系统里,触发器类似过程和函数,都有声明,执行和异常处理过程的PL/SQL块. 8.1 触发器类型 触发器在数据库里 ...

随机推荐

  1. 两个port贴合七夕主题,百度输入法的“情感营销”策略

        一年一度的七夕佳节是情侣.夫妻之间传情达意.诉说衷肠的最佳时节.基于这一背景.一些传统企业.互联网公司也会针对性的推出一些营销策划,使产品和服务更贴近用户需求,更"接地气" ...

  2. 【leetcode】123. Best Time to Buy and Sell Stock III

    @requires_authorization @author johnsondu @create_time 2015.7.22 19:04 @url [Best Time to Buy and Se ...

  3. overridePendingTransition介绍

    Activity的切换动画指的是从一个activity跳转到另外一个activity时的动画 它包含两个部分: 一部分是第一个activity退出时的动画: 另外一部分时第二个activity进入时的 ...

  4. POJ 1469(裸二分匹配)

    COURSES Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 18993   Accepted: 7486 Descript ...

  5. 关于React组件之间如何优雅地传值的探讨

    闲话不多说,开篇撸代码,你可以会看到类似如下的结构: import React, { Component } from 'react'; // 父组件 class Parent extends Com ...

  6. 基于Office 365的随需应变业务应用平台

    作者:陈希章 发表于 2017年9月7日 这是我去年10月底在微软技术大会(Microsoft Ignite 2016) 上面的演讲主题,承蒙大家抬爱,也沾了前一场明星讲师的光,我记得会场几乎是满座. ...

  7. Spring定时任务有时候会莫名奇妙的终止?

    最近在是使用Spring配置定时定时任务(基于xml配置使用spring自带的定时任务),一开始使用没什么问题当使用久了就会出现有些定时任务自动停止了.(关于如何使用以及如何它的原理是啥,这里不进行阐 ...

  8. 自学Zabbix3.5.5-监控项item-User parameters(自定义key)

    为什么要自定义KEY,即User parameters功能 有时候我们想让被监控端执行一个zabbix没有预定义的检测,zabbix的用户自定义参数功能提供了这个方法.我们可以在客户端配置文件zabb ...

  9. android studio 使用adb命令传递文件到android设备

    一:文件传输 在android开发中,有时候需要将文件从pc端传递至android,或者将软件运行的日志,从android设备传递到pc进行分析,我们可以使用windows的cmd窗口,或者andro ...

  10. CentOS中安装配置Nginx

    一.安装Nginx '首先我们需要在nginx官网中下载nginx安装包,在这就下载最新版 nginx-1.13.7版本 下载完成以后我们进入下载页面进行查看 下载文件目录为 home/userNam ...