oracle 触发器 行级,oracle的行级触发器使用

行级触发器:

当触发器被触发时,要使用被插入、更新或删除的记录中的列值,有时要使用操作前、后列的值.

:NEW 修饰符访问操作完成后列的值

:OLD 修饰符访问操作完成前列的值

f50068f894ff19c2a5d307b8e750d088.png

例1: 建立一个触发器, 当职工表 emp 表被删除一条记录时,把被删除记录写到职工表删除日志表中去。

CREATE TABLE emp_his AS SELECT * FROM EMP WHERE 1 = 2 ; CREATE OR REPLACE TRIGGER tr_del_emp BEFORE DELETE -- 指定触发时机为删除操作前触发 ON scott.emp FOR EACH ROW -- 说明创建的是行级触发器 BEGIN -- 将修改前数据插入到日志记录表 del_emp ,以供监督使用。 INSERT INTO emp_his(deptno , empno, ename , job ,mgr , sal , comm , hiredate ) VALUES ( :old.deptno, :old.empno, :old.ename , :old.job,:old.mgr, :old.sal, :old.comm, :old.hiredate ); END ; DELETE emp WHERE empno = 7788 ; DROP TABLE emp_his; DROP TRIGGER del_emp;

例2:限制对Departments表修改(包括INSERT,DELETE,UPDATE)的时间范围,即不允许在非工作时间修改departments表。

CREATE OR REPLACE TRIGGER tr_dept_time BEFORE INSERT OR DELETE OR UPDATE ON departments BEGIN IF (TO_CHAR(sysdate, ' DAY ' ) IN ( ' 星期六 ' , ' 星期日 ' )) OR (TO_CHAR(sysdate, ' HH24:MI ' ) NOT BETWEEN ' 08:30 ' AND ' 18:00 ' ) THEN RAISE_APPLICATION_ERROR( - 20001 , ' 不是上班时间,不能修改departments表 ' ); END IF ; END ;

例3:限定只对部门号为80的记录进行行触发器操作。

CREATE OR REPLACE TRIGGER tr_emp_sal_comm

BEFORE UPDATE OF salary, commission_pct

OR DELETE

ON HR.employees FOR EACH ROW WHEN (old.department_id = 80 ) BEGIN CASE WHEN UPDATING ( ' salary ' ) THEN IF :NEW.salary < :old.salary THEN RAISE_APPLICATION_ERROR( - 20001 , ' 部门80的人员的工资不能降 ' ); END IF ; WHEN UPDATING ( ' commission_pct ' ) THEN IF :NEW.commission_pct < :old.commission_pct THEN RAISE_APPLICATION_ERROR( - 20002 , ' 部门80的人员的奖金不能降 ' ); END IF ; WHEN DELETING THEN RAISE_APPLICATION_ERROR( - 20003 , ' 不能删除部门80的人员记录 ' ); END CASE ; END ;

/*

实例:

UPDATE employees SET salary = 8000 WHERE employee_id = 177;

DELETE FROM employees WHERE employee_id in (177,170);

*/

例4: 利用行触发器实现级联更新。在修改了主表 regions 中的 region_id 之后( AFTER ),级联的、自动的更新子表 countries 表中原来在该地区的国家的 region_id 。

CREATE OR REPLACE TRIGGER tr_reg_cou AFTER update OF region_id ON regions FOR EACH ROW BEGIN DBMS_OUTPUT.PUT_LINE( ' 旧的region_id值是 ' || :old.region_id || ' 、新的region_id值是 ' || :new.region_id); UPDATE countries SET region_id = :new.region_id WHERE region_id = :old.region_id; END ;

例5:在触发器中调用过程。

CREATE OR REPLACE PROCEDURE add_job_history ( p_emp_id job_history.employee_id % type , p_start_date job_history.start_date % type , p_end_date job_history.end_date % type , p_job_id job_history.job_id % type , p_department_id job_history.department_id % type ) IS BEGIN INSERT INTO job_history (employee_id, start_date, end_date, job_id, department_id) VALUES (p_emp_id, p_start_date, p_end_date, p_job_id, p_department_id); END add_job_history; -- 创建触发器调用存储过程... CREATE OR REPLACE TRIGGER update_job_history AFTER UPDATE OF job_id, department_id ON employees FOR EACH ROW BEGIN add_job_history(:old.employee_id, :old.hire_date, sysdate, :old.job_id, :old.department_id); END ;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/564471.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

司铭宇老师:如何让企业销售培训效果落地

如何让企业销售培训效果落地 在企业销售培训中&#xff0c;我们经常听到一个词&#xff0c;那就是“落地”。所谓的“落地”&#xff0c;简单来说就是将培训中所学到的知识和技能转化为实际的工作行动&#xff0c;从而提高销售业绩。但是&#xff0c;如何才能让销售培训效果真…

linux 宽字符串,C语言中的多字节字符与宽字符

C语言原本是在英文环境中设计的&#xff0c;主要的字符集是7位的ASCII码&#xff0c;8位的byte(字节)是最常见的字符编码单位。但是国际化软件必须能够表示不同的字符&#xff0c;而这些字符数量庞大&#xff0c;无法使用一个字节编码。C95标准化了两种表示大型字符集的方法&am…

C++函数编译原理和成员函数的实现

C函数的编译 C中的函数在编译时会根据命名空间、类、参数签名等信息进行重新命名&#xff0c;形成新的函数名。这个重命名的过程是通过一个特殊的算法来实现的&#xff0c;称为 名字编码&#xff08;Name Mangling&#xff09;。 Name Mangling 是一种可逆的算法&#xff0c;…

linux 运行选择哪个cpu核,判断Linux进程在哪个CPU核运行的方法

问题&#xff1a;有一个Linux进程运行在多核处理器系统上&#xff0c;如何查看该进程运行在哪个CPU上&#xff1f;方法一&#xff1a;ps 命令可以告诉你每个进程/线程目前分配到的(在“PSR”列)CPU ID。ps -o pid,psr,comm -p 运行结果&#xff1a;PID PSR COMM5357 10 prog输…

C++对象数组

对象数组是什么 数组对象就是大批量实例化对象的一种方法&#xff0c;例如&#xff1a;Student stu 实例化对象&#xff0c;如果有好几百个对象应该怎么办&#xff1f;这时候就用到了对象数组&#xff0c;顾名思义&#xff0c;就是吧所有要实例化的对象都放到一个组里面&#…

镜像安装linux选择内核版本,在CentOS和Ubuntu中安装Linux Kernel 4.13.10

Linus Torvalds 在 10 月 17 日星期五正式发布了稳定版 Linux Kernel 4.13.10&#xff0c;这个最新版本发布了新功能&#xff0c;进行了诸多修复和问题改进。下面将向大家介绍在 CentOS 和 Ubuntu 中手动安装、更新 Linux Kernel 4.13.10 的方法&#xff0c;当然&#xff0c;这…

linux设备进入睡眠所需时间,android linux 休眠 深度睡眠 查看 方法 调试【转】

在Android移动设备中&#xff0c;有时按下Power键(未接电源&#xff0c;USB)时&#xff0c;因其它apk程序获取了wake_up锁未释放或程序BUG导致未释放&#xff0c;造成未能进入深度睡眠&#xff0c;从而加大了耗电量&#xff0c;减少了待机时间&#xff0c;参考如下图&#xff0…

linux qt5.9交叉编译,QT5.9移植

&#xff11;&#xff0e;下载&#xff31;&#xff54;源码Qt源码下载地址&#xff1a;Index of /archive/qt 其他源码和其他安装包都是有的。2&#xff0e;解压源码$ mkdir qt5.9$cd qt5.9将下载文件拷贝到当前目录下面。解压$ xz -d qt-everywhere-opensource-src-5.9.7.t…

linux wps 公式编辑器,WPS 2012数学公式编辑器的使用方法(详细图解)

做数学或物理课件时很多公式是件比较头痛的事。时常陷入无穷的拼接法中&#xff0c;用一个一个文本框组合成复杂的公式。其实WPS 2012e为我们提供了一个功能强大的公式编辑器Equation Editor&#xff0c;可以帮助我们解决这些问题。1、插入公式将光标放置于欲插入公式的位置&am…

linux客户端 存活检测,Linux下客户端检测服务器的 heartbeat

客户端代码&#xff0c;和一般的客户端不一样#include#include#include#include#include#include#include#include#include#include#include #include #define MAXDATASIZE 100int main(){int sockfd,nbytes,serv_port;char buf_serv_ip[16],buf[260];struct sockaddr_in serv_…

python object单引号变成双引号_Python学习第163课--Linux命令行中的单引号和双引号...

【每天几分钟&#xff0c;从零入门python编程的世界&#xff01;】我们都知道引号的作用就是为了引用&#xff0c;比如引用别人说的话&#xff0c;这句话就放在引号里面。而Linux命令行中的single quote(单引号)和dubble quote(双引号)有不同的作用。●双引号linux命令中双引号…

C语言条件循环语句执行步骤,C语言中for语句的执行过程是什么?

C语言中for语句的执行过程是&#xff1a;1、会先判断条件表达式是否成立&#xff0c;如果条件成立则执行中间循环体&#xff0c;执行完中间循环体后接着执行末尾循环体 &#xff1b;2、在执行完末尾循环体后对条件表达式再次判断&#xff0c;若条件还成立&#xff0c;则继续重复…

c语言规范标准中英文,C语言中英文翻译资料.doc

C语言中英文翻译资料.docThe C Programming LanguageC is a high-level programming language developed by Dennis Ritchie and Brian Kernighan at Bell Labs in the mid-1970s. Although originally designed as a systems programming language, C has proved to be a powe…

SQL语言深入

数据库系统 数据库系统主要有以下 3 个组成部分&#xff1a; 1 . 数据库&#xff1a;用于存储数据的地方。 2 . 数据库管理系统&#xff1a;用于管理数据库的软件。 3 . 数据库应用程序&#xff1a;为了提高数据库系统的处理能力所使用的管理数据库库的软件补充。 数据库管…

加法的横式竖式教案c语言,20以内竖式加减法教案

【www.ahanw.cn--活动致辞】活动意图&#xff1a;数学的加减法运算很重要。特别是20以内的加减法是各种数字运算的基础。学好20以内的加减法&#xff0c;有利于活化孩子的头脑&#xff0c;发展孩子的思维。活动目标&#xff1a;1、感知进位加、退位减的算法&#xff0c;整理和归…

c语言平面向量加法考点,平面向量的加减法怎么死活都不会?有没有什么口诀?例如:向量AB+BC=?向量OA-OB=?向量AB-CB=?有没有什么口诀!...

设a(x,y),b(x,y).1、向量的加法向量的加法满足平行四边形法则和三角形法则.ABBCAC.ab(xx,yy).a00aa.向量加法的运算律&#xff1a;交换律&#xff1a;abba&#xff1b;结合律&#xff1a;(ab)ca(bc).2、向量的减法如果a、b是互为相反的向量,那么a-b,b-a,ab0.0的反向量为0AB-ACC…

neo4j browser执行脚本后不提示用时_还不懂什么是分层自动化测试的,有赞的实践经历告诉你...

来源&#xff1a;https://testerhome.com/articles/19109# 背景先理一下自动化测试的概念&#xff0c;从广义上来说&#xff0c;一切通过工具(程序)的方式来代替或者辅助手工测试的行为都可以成为自动化。从狭义上来说&#xff0c;通过编写脚本的方式&#xff0c;模拟手工测试…

android+自定义alertdialog,安卓自定义AlertDialog

AlertDialog.png使用方法 example:DialogUtil.showAlertDialog(getActivity(), R.mipmap.restart, "退出提示", "你确定要退出吗&#xff1f;"),"确定", "取消", true, new DialogUtil.AlertDialogBtnClickListener() {Overridepublic…

mysql datetime 后面带了很多0_面试官:MySQL 表设计要注意什么?

作者 孤独烟来自公众号&#xff1a;孤独烟引言大家应该知道烟哥最近要(tiao 咳咳咳)&#xff0c;嗯&#xff0c;不可描述&#xff01;随手讲其中一部分知识&#xff0c;都是一些烟哥自己平时工作的总结以及经验。大家看完&#xff0c;其实能避开很多坑。而且很多问题&#xff0…

android studio viewo,Android Studio 之 ViewModel

ViewModel 是 JetPack 类库中的一个功能&#xff0c;可以保存控件的状态 &#xff0c;在整个Activity 生命周期中&#xff0c;状态不会失效如屏幕翻转时&#xff0c;状态可保留&#xff0c;不会失效&#xff01;与 LiveData 配合使用&#xff01;配合 Room 进行 Sqlite 操作数据…