触发器应用 trigger
首先有一张表:
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相关推荐
- 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. ...
- mysql多字段修改update_MySQL ------ 触发器(TRIGGER)(二十七)
MySQL 语句在需要时被执行,存储过程也是,但是你要是想要某条(或某些语句)在事件发生时自动执行,该怎么办触发器由此而来 触发器:某个表发生更改时自动处理.触发器是MySQL响应delete,ins ...
- 施密特触发器(Schmitt Trigger)?
施密特触发器(Schmitt Trigger),简单的说就是具有滞后特性的数字传输门. (一)施密特触发器结构举例 (二)施密特触发器具体分析 (三)施密特触发器电路用途 (四)施密特触发器相关部分总 ...
- mysql delete语句_MySQL ------ 触发器(TRIGGER)(二十七)
MySQL 语句在需要时被执行,存储过程也是,但是你要是想要某条(或某些语句)在事件发生时自动执行,该怎么办触发器由此而来 触发器:某个表发生更改时自动处理.触发器是MySQL响应delete,ins ...
- MySQL(加强)06 -- 触发器(Trigger)
MySQL好像从5.0.2版本就开始支持触发器的功能了,本次博客就来介绍一下触发器,首先还是谈下概念性的东西吧: 什么是触发器 触发器是与表有关的数据库对象,在满足定义条件时触发,并执行触发器中定义的 ...
- 触发器(Trigger)
触发器(Trigger) 触发器是一种特殊类型的存储过程,不由用户直接调用.创建触发器时会对其进行定义,以便在对特定表或列作特定类型的数据修改时执行.触发器可以查询其他表,而且可以包含复杂的 SQL ...
- SQL Server 触发器( trigger ) ------- 用例详解( 你需要举一反三的触发器实用方法都在这了 )
trigger 导航专用 第一部分 1. 概述 ① 触发器的特点 ② 触发器的作用 ③ 触发器的分类 ④ DML 触发器的分类 第二部分 实现 1. 触发器的创建 ① insert 触发器的创建 ② ...
- 关于数据库触发器(trigger)的简单使用操作
最近在做一些东西,用到关于数据库触发器的简单使用.比如当我们在做用户模块的表设计的时候,我们建了联用户信息表(t_user)和账号表(t_account),账号表(t_account)用来进行账号的注 ...
- 什么是施密特触发器(Schmitt Trigger)?
http://hi.baidu.com/hieda/blog/item/c996d9cc5d1a8c1400e92877.html 施密特触发器(Schmitt Trigger),简单的说就是具有滞后 ...
- Unity 3D 碰撞体(Collider)|| Unity 3D 触发器(Trigger)
在游戏制作过程中,游戏对象要根据游戏的需要进行物理属性的交互. 因此,Unity 3D 的物理组件为游戏开发者提供了碰撞体组件.碰撞体是物理组件的一类,它与刚体一起促使碰撞发生. 碰撞体是简单形状,如 ...
最新文章
- P1852 [国家集训队]跳跳棋
- 利用SoapUI 测试web service的一些问题总结
- 开源项目|基于darknet实现量化感知训练,已实现yolov3-tiny所有算子
- 搬了十次家,总算搬进了自己的家
- 武林c语言,c语言printf函数的使用
- store.js - 轻松实现本地存储(LocalStorage)
- PHP_SELF,SCRIPT_NAME,SCRIPT_FILENAME,PATH_INFO,REQUEST_URI的区别
- 常见API漏洞解释以及应用层解决方案
- ting56 下载 有声小说 超禁忌游戏
- 人类最美的24张数学画(图)
- 快速掌握maya软件(基础建模)
- Seaborn使用violinplot函数可视化分组小提琴图(violin plot)、使用inner函数设置在小提琴图中使用虚线显示分位数位置(inner = ‘quartile‘)
- AlexNet 实现猫狗分类(keras and pytorch)
- 江南爱窗帘十大品牌,怎么合理的搭配窗帘配色
- 腾讯多媒体实验室:基于三维卷积神经网络的全参考视频质量评估算法
- 智能机器人与智能系统(大连理工大学庄严教授)——3.工业机器人
- 机器学习作业-交通流量预测综述
- 【03yy and triangle】
- 如何将弹幕嵌入视频中,合成一个文件
- Moveit!入门教程-配置助手
热门文章
- javaee安装_JDK下载安装与环境变量配置【超详细】
- 【PAT甲】1001 A+B Format (20分) 格式化输出
- 【Luogu1588】丢失的牛
- mongodb和mysql空间占用_MongoDB的存储结构及对空间使用率的影响
- java中html在哪里找_java – 如何找出在我的servlet中推送哪个HTML按钮?
- python博客主题_博客园SimpleMemary主题美化教程
- shǎ崽 OrOrOrOrz
- TCP协议的流量控制
- UnityShader13:渐变与遮罩
- kite:Python 代码自动补全神器