首先有一张表:

create table T_SALARY
(name   VARCHAR2(20),age    NUMBER(2),salary NUMBER(5)
);insert into t_salary (NAME, AGE, SALARY)
values ('wyl', 23, 63000);insert into t_salary (NAME, AGE, SALARY)
values ('werxiao', 43, 6012);insert into t_salary (NAME, AGE, SALARY)
values ('lisi', 54, 7000);insert into t_salary (NAME, AGE, SALARY)
values ('zhangsan', 42, 4521);

触发器应用场景1:复杂的安全性检查,如下

  

CREATE OR REPLACE TRIGGER t_security_t_salary
BEFORE UPDATE
ON t_salary
/*触发器应用场景1:复杂的安全检查禁止在非工作时间操作表周末或者不在9点到18点之间,为非工作时间
*/
BEGINIF(to_char(SYSDATE,'day')IN('星期六','星期日')) ORto_number(to_char(sysdate,'hh24')) NOT BETWEEN 9 AND 18 THEN--to_number(to_char(sysdate,'hh24')) BETWEEN 9 AND 18 THEN--禁止insert 新员工raise_application_error('-20002','非工作时间不允许操作这张表');END IF;
END;

  其中 raise_application_error()的第一个参数为 -20999到-20000之间。效果图如下:

实际项目中的实例:

  1 CREATE OR REPLACE TRIGGER TR_AC02_UPDATE
  2   BEFORE UPDATE ON AC02
  3   FOR EACH ROW
  4 DECLARE
  5
  6   V_AAE036_MAX NUMBER(8); ---上次变动日期
  7   V_AKC094     NUMBER(16, 2);
  8   V_COUNT      NUMBER;
  9   V_AAE240     NUMBER;
 10   V_AAE011     SKC89.AAE011%TYPE;
 11   V_CAZ062     SAC03.CAZ062%TYPE;
 12   V_BAE007     SAC03.BAE007%TYPE;
 13   V_BAE001     AC02.BAE001%TYPE;
 14 BEGIN
 15
 16   IF UPDATING('BAE001') AND :NEW.BAE001 <> :OLD.BAE001 THEN
 17     ---如果是职工基本医疗切换社保机构,则做备份记录
 18     IF :OLD.AAE140 = '310' THEN
 19       ----修改skc81的经办机构 xgy 2014.5.22
 20       UPDATE SKC81
 21          SET BAE001 = :NEW.BAE001, AAB001 = :NEW.AAB001
 22        WHERE AAC001 = :OLD.AAC001;
 23       BEGIN
 24         SELECT NVL(AAE240, 0)
 25           INTO V_AAE240
 26           FROM SKC81
 27          WHERE AAC001 = :OLD.AAC001
 28            AND CAE246 = '1';
 29
 30         SELECT AAE011
 31           INTO V_AAE011
 32           FROM AC23
 33          WHERE AAC001 = :OLD.AAC001
 34            AND AAE036 =
 35                (SELECT MAX(AAE036) FROM AC23 WHERE AAC001 = :OLD.AAC001);
 36       EXCEPTION
 37         WHEN NO_DATA_FOUND THEN
 38           V_AAE011 := 0;
 39       END;
 40       --select aae011 into v_aae011 from ac23 where bae007 = v_bae007;
 41       INSERT INTO SKC89
 42         (CKZ711,
 43          AAC001,
 44          AAB001_OLD,
 45          BAE001_OLD,
 46          AAB001_NEW,
 47          BAE001_NEW,
 48          AAE240,
 49          AAE036,
 50          AAE011)
 51       VALUES
 52         (SEQ_YBDY_CKZ711.NEXTVAL,
 53          :NEW.AAC001,
 54          :OLD.AAB001,
 55          :OLD.BAE001,
 56          :NEW.AAB001,
 57          :NEW.BAE001,
 58          V_AAE240,
 59          TO_CHAR(SYSDATE, 'yyyymmddhh24miss'),
 60          V_AAE011);
 61     END IF;
 62     NULL;
 63   END IF;
 64
 65   --20131121 lqh
 66   IF UPDATING('aac008') AND :NEW.AAC008 IN ('2', '4') THEN
 67     ---2014.10.10 删除对应的sac15
 68     DELETE FROM SAC15
 69      WHERE AAC001 = :OLD.AAC001
 70        AND AAB001 = :OLD.AAB001
 71        AND AAE140 = :OLD.AAE140;
 72     IF :OLD.AAE140 = '110' AND :NEW.AAC008 = '2' THEN
 73       UPDATE SIC81
 74          SET CAE246 = '1'
 75        WHERE AAC001 = :OLD.AAC001
 76          AND AAE140 = '110';
 77     END IF;
 78     /* if :old.aae140 = '110' and :new.aac008 = '4' then
 79       update sic81 set cae246 = '2' WHERE AAC001 = :old.aac001 and aae140 ='110';
 80     end if; */
 81     IF :OLD.AAE140 = '310' AND :NEW.AAC008 IN ('2', '4') THEN
 82       UPDATE SKC81 SET CAE246 = '1' WHERE AAC001 = :OLD.AAC001;
 83     END IF;
 84
 85   END IF;
 86
 87   ---修改人员附属信息中的社区ID
 88   IF UPDATING('aab001') THEN
 89     UPDATE SAC02 SET CAC561 = :NEW.AAB001 WHERE AAC001 = :OLD.AAC001;
 90   END IF;
 91
 92   IF UPDATING('aac008') THEN
 93     INSERT INTO AC02_BF
 94       SELECT :OLD.AAZ159,
 95              :OLD.BAE001,
 96              :OLD.AAB001,
 97              :OLD.AAC001,
 98              :OLD.AAE140,
 99              :OLD.AAC013,
100              :OLD.CAC013,
101              :OLD.AAA095,
102              :OLD.AAC008,
103              :OLD.AAC049,
104              :OLD.CAC014,
105              :OLD.AAE201,
106              0,
107              TO_CHAR(SYSDATE, 'yyyymmddhh24miss')
108         FROM DUAL;
109     INSERT INTO AC02_BF
110       SELECT :NEW.AAZ159,
111              :NEW.BAE001,
112              :NEW.AAB001,
113              :NEW.AAC001,
114              :NEW.AAE140,
115              :NEW.AAC013,
116              :NEW.CAC013,
117              :NEW.AAA095,
118              :NEW.AAC008,
119              :NEW.AAC049,
120              :NEW.CAC014,
121              :NEW.AAE201,
122              1,
123              TO_CHAR(SYSDATE, 'yyyymmddhh24miss')
124         FROM DUAL;
125   END IF;
126
127 END TR_AC02_UPDATE;

转载于:https://www.cnblogs.com/Sunnor/p/4645326.html

触发器应用 trigger相关推荐

  1. Oracle Study之--Oracle触发器(Trigger)

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

  2. mysql多字段修改update_MySQL ------ 触发器(TRIGGER)(二十七)

    MySQL 语句在需要时被执行,存储过程也是,但是你要是想要某条(或某些语句)在事件发生时自动执行,该怎么办触发器由此而来 触发器:某个表发生更改时自动处理.触发器是MySQL响应delete,ins ...

  3. 施密特触发器(Schmitt Trigger)?

    施密特触发器(Schmitt Trigger),简单的说就是具有滞后特性的数字传输门. (一)施密特触发器结构举例 (二)施密特触发器具体分析 (三)施密特触发器电路用途 (四)施密特触发器相关部分总 ...

  4. mysql delete语句_MySQL ------ 触发器(TRIGGER)(二十七)

    MySQL 语句在需要时被执行,存储过程也是,但是你要是想要某条(或某些语句)在事件发生时自动执行,该怎么办触发器由此而来 触发器:某个表发生更改时自动处理.触发器是MySQL响应delete,ins ...

  5. MySQL(加强)06 -- 触发器(Trigger)

    MySQL好像从5.0.2版本就开始支持触发器的功能了,本次博客就来介绍一下触发器,首先还是谈下概念性的东西吧: 什么是触发器 触发器是与表有关的数据库对象,在满足定义条件时触发,并执行触发器中定义的 ...

  6. 触发器(Trigger)

    触发器(Trigger) 触发器是一种特殊类型的存储过程,不由用户直接调用.创建触发器时会对其进行定义,以便在对特定表或列作特定类型的数据修改时执行.触发器可以查询其他表,而且可以包含复杂的 SQL ...

  7. SQL Server 触发器( trigger ) ------- 用例详解( 你需要举一反三的触发器实用方法都在这了 )

    trigger 导航专用 第一部分 1. 概述 ① 触发器的特点 ② 触发器的作用 ③ 触发器的分类 ④ DML 触发器的分类 第二部分 实现 1. 触发器的创建 ① insert 触发器的创建 ② ...

  8. 关于数据库触发器(trigger)的简单使用操作

    最近在做一些东西,用到关于数据库触发器的简单使用.比如当我们在做用户模块的表设计的时候,我们建了联用户信息表(t_user)和账号表(t_account),账号表(t_account)用来进行账号的注 ...

  9. 什么是施密特触发器(Schmitt Trigger)?

    http://hi.baidu.com/hieda/blog/item/c996d9cc5d1a8c1400e92877.html 施密特触发器(Schmitt Trigger),简单的说就是具有滞后 ...

  10. Unity 3D 碰撞体(Collider)|| Unity 3D 触发器(Trigger)

    在游戏制作过程中,游戏对象要根据游戏的需要进行物理属性的交互. 因此,Unity 3D 的物理组件为游戏开发者提供了碰撞体组件.碰撞体是物理组件的一类,它与刚体一起促使碰撞发生. 碰撞体是简单形状,如 ...

最新文章

  1. P1852 [国家集训队]跳跳棋
  2. 利用SoapUI 测试web service的一些问题总结
  3. 开源项目|基于darknet实现量化感知训练,已实现yolov3-tiny所有算子
  4. 搬了十次家,总算搬进了自己的家
  5. 武林c语言,c语言printf函数的使用
  6. store.js - 轻松实现本地存储(LocalStorage)
  7. PHP_SELF,SCRIPT_NAME,SCRIPT_FILENAME,PATH_INFO,REQUEST_URI的区别
  8. 常见API漏洞解释以及应用层解决方案
  9. ting56 下载 有声小说 超禁忌游戏
  10. 人类最美的24张数学画(图)
  11. 快速掌握maya软件(基础建模)
  12. Seaborn使用violinplot函数可视化分组小提琴图(violin plot)、使用inner函数设置在小提琴图中使用虚线显示分位数位置(inner = ‘quartile‘)
  13. AlexNet 实现猫狗分类(keras and pytorch)
  14. 江南爱窗帘十大品牌,怎么合理的搭配窗帘配色
  15. 腾讯多媒体实验室:基于三维卷积神经网络的全参考视频质量评估算法
  16. 智能机器人与智能系统(大连理工大学庄严教授)——3.工业机器人
  17. 机器学习作业-交通流量预测综述
  18. 【03yy and triangle】
  19. 如何将弹幕嵌入视频中,合成一个文件
  20. Moveit!入门教程-配置助手

热门文章

  1. javaee安装_JDK下载安装与环境变量配置【超详细】
  2. 【PAT甲】1001 A+B Format (20分) 格式化输出
  3. 【Luogu1588】丢失的牛
  4. mongodb和mysql空间占用_MongoDB的存储结构及对空间使用率的影响
  5. java中html在哪里找_java – 如何找出在我的servlet中推送哪个HTML按钮?
  6. python博客主题_博客园SimpleMemary主题美化教程
  7. shǎ崽 OrOrOrOrz
  8. TCP协议的流量控制
  9. UnityShader13:渐变与遮罩
  10. kite:Python 代码自动补全神器