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,一经查实,立即删除!

相关文章

python include的功能_在Python的Config中增加Include功能

在python中配置文件分析我一般都用configparser。很好&#xff0c;符合我的一贯需求。文本格式、简单、内置。如:[db]hostlocalhostuserdlpasswd12345678[other]因为小程序较多&#xff0c;分别在不同地方&#xff0c;但是都有些共同的配置(如DB的配置)。如果能在配置文件中inc…

oracle的空闲等待事件,Oracle 常见的33个等待事件详解

一&#xff0e; 等待事件的相关知识&#xff1a;1.1 等待事件主要可以分为两类&#xff0c;即空闲(IDLE)等待事件和非空闲(NON-IDLE)等待事件。1). 空闲等待事件指ORACLE正等待某种工作&#xff0c;在诊断和优化数据库的时候&#xff0c;不用过多注意这部分事件。2). 非空闲等待…

python wechatpay微信支付回调_【微信支付】JSAPI支付开发者文档

XXE漏洞需要您在回调处理代码里面解析XML之前&#xff0c;加入禁用实体解析的代码&#xff0c;不同语言设置的内容不同&#xff0c;下面提供了几种主流开发语言的设置指引(您可以根据关键字找到xml解析组件采取对应方法升级)&#xff1a;【PHP】 解析XML代码前加入&#xff1a;…

如何查看oracle压力,oracle压力测试之orabm

数据库压力测试一、用orabm测试数据库CPUOrabm通过在用户指定的并发下运行指定数量的事务来测试系统性能.它主要测试数据库服务器的CPU性能和内存。orabm实际上是一堆sql的集合。orabm可以用在linux/windows/solaris下使用。orabm不一定需要运行在数据库所在服务器上&#xff0…

C++ static静态成员变量

在C中&#xff0c;我们可以使用静态成员变量来实现多个对象共享数据的目标。静态成员变量是一种特殊的成员变量&#xff0c;它被关键字static修饰&#xff0c;例如&#xff1a; class Student{ public:Student(char *name, int age, float score);void show(); public:static …

oracle河南城建学院实验报告,数据处理实验报告

化工与材料工程学院实验报告《试验设计与数据处理》上机实验报告学 生 学 号 学 生 姓 名 专 业 班 级 指 导 教 师 联合指导教师 完 成 日 期教 授 教 授 2010.5.27.第 1 章 实验一 Excel 基础及有关操作技巧1.1 实验目的熟悉 Excel 基础操作&#xff0c;掌握 Excel 有关操作技…

import lombok 报错_Lombok注解@Getter @Setter详解

1.为什么强大​项目中经常使用bean&#xff0c;entity等类&#xff0c;绝大部分数据类类中都需要get、set、toString、equals和hashCode方法&#xff0c;尽管IDE工具都会帮我们生成。但自动生成这些代码后&#xff0c;如果bean中的属性一旦有修改、删除或增加时&#xff0c;需要…

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

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

C++ static静态成员函数

在类中&#xff0c;static 除了可以声明静态成员变量&#xff0c;还可以声明静态成员函数。普通成员函数可以访问所有成员&#xff08;包括成员变量和成员函数&#xff09;&#xff0c;静态成员函数只能访问静态成员。 编译器在编译一个普通成员函数时&#xff0c;会隐式地增加…

php7开发的项目怎么样,如何在PHP7项目中搭建一个多线程

如何在PHP7项目中搭建一个多线程发布时间&#xff1a;2021-03-05 15:31:22来源&#xff1a;亿速云阅读&#xff1a;93作者&#xff1a;Leah这期内容当中小编将会给大家带来有关如何在PHP7项目中搭建一个多线程&#xff0c;文章内容丰富且以专业的角度为大家分析和叙述&#xff…

C++ const成员变量和成员函数

const成员变量 const 成员变量的用法和普通 const 变量的用法相似&#xff0c;只需要在声明时加上 const 关键字。初始化 const 成员变量只有一种方法&#xff0c;就是通过构造函数的初始化列表。 const成员函数&#xff08;常成员函数&#xff09; const 成员函数可以使用类…

通过日志恢复oracle序列,(存档日志包含序列84,要求序列36)怎么恢复啊?

(存档日志包含序列84&#xff0c;要求序列36)怎么恢复啊&#xff1f;SQL> startup mount;ORACLE 例程已启动Total System Global Area 135338868 bytesFixed Size 453492 bytesVariable Size 109051904 bytesDatabase Buffers 251…

C++ const对象

C 中&#xff0c;const 也可以用来修饰对象&#xff0c;称为常对象。一旦将对象定义为常对象之后&#xff0c;就只能调用类的 const 成员&#xff08;包括 const 成员变量和 const 成员函数&#xff09;了。 定义常对象的语法和定义常量的语法类似&#xff1a; const class …

lvs工作在第几层_LVS 原理(调度算法、四种模式、四层负载均衡和七层 的区别)...

目录lvs的调度算法lvs的四种模式四层均衡负载和七层的区别1、lvs调度算法(最常用的四种)轮叫调度(rr)调度器通过外部请求的顺序轮流分配到集群中的真实服务器上&#xff0c;对每台服务器都是均等的&#xff1b;但是这样调度器不会考虑服务器上实际的连接数和系统负载&#xff0…

linux 常用头文件,(常用头文件详解.doc

(常用头文件详解linux常用头文件详解POSIX标准定义的头文件??????? 目录项???????? 文件控制??? 文件名匹配类型??? 路径名模式匹配类型??????? 组文件??? 网络数据库操作??????? 口令文件??? 正则表达式??????? TAR归档值??…

a as as big rat_超好玩!12句英语绕口令,你能一口气读完几句?

绕口令(tongue twister)是一种语言游戏&#xff0c;它是将发音相同、相近等容易混淆的字组成拗口的句子&#xff0c;要求朗读者一口气快速念完而且不能出错&#xff0c;极具趣味。相信很多同学都玩过&#xff0c;假如绕口令也有段位划分的话&#xff0c;你是什么段位&#xff1…

C++ friend关键字

friend 的意思是朋友&#xff0c;或者说是好友&#xff0c;与好友的关系显然要比一般人亲密一些。我们会对好朋友敞开心扉&#xff0c;倾诉自己的秘密&#xff0c;而对一般人会谨言慎行&#xff0c;潜意识里就自我保护。在 C 中&#xff0c;这种友好关系可以用 friend 关键字指…

linux vps 运行exe文件夹,linux 64位下安装wine1.6 Windows模拟器(用来运行.exe文件) 编译安装32位wine...

cdyum groupinstall Development Tools -yyum install libX11-devel freetype-devel -ywget http://prdownloads.sourceforge.NET/wine/wine-1.6.tar.bz2tar -jvxf wine-1.6.tar.bz2cd wine-1.6编译之前先安装32位运行库不然不能编译:yum install alsa-lib-devel.i686 libsndfi…

python修改文件格式为unix_软件测试技术之如何用python在Windows系统下,生成UNIX格式文件...

本文将带你了解软件测试技术之如何用python在Windows系统下&#xff0c;生成UNIX格式文件&#xff0c;希望对大家学测试技术有所帮助如何用python在Windows系统下&#xff0c;生成UNIX格式文件平时测试工作中&#xff0c;少不了制造测试数据。最近一个项目&#xff0c;我就需要…

C++ class和struct的区别

C中的 struct 和 class 的区别&#xff1a; 1 . 使用 class 时&#xff0c;类中的成员默认都是 private 属性的&#xff1b;而使用 struct 时&#xff0c;结构体中的成员默认都是 public 属性的。 2 . class 继承默认是 private 继承&#xff0c;而 struct 继承默认是 public …