DML触发器的创建

目录

触发器的创建

DML触发器的创建

语句级 DML 触发器的创建

创建触发器,当对emp数据表进行添加记录、更新记录和删除记录的时候,判断是否是工作时间段,如果不是工作时间段,不允许执行

在数据表 dept 上创建触发器,当在该表上插入、删除或者更新的时候,记录操作日志

行级 DML 触发器的创建

为 emp 数据表创建一个触发器,当插入新员工的时候,显示新员工的工号和姓名;当更新员工工资的时候,显示每个员工更新前后的工资;当删除员工的时候,显示被删除员工的工号和姓名

创建一个数据表用于存放学生的基本信息,并创建一个序列,然后在表上创建一个触发器,在向表中插入数据的时候,触发所建立的触发器,为学生信息表自动添加主键序列值


Oracle从入门到总裁:​​​​​​https://blog.csdn.net/weixin_67859959/article/details/135209645

触发器的创建

触发器的基本语法如下所示。

CREATE OR REPLACE TRIGGER<触发器名>
<触发时间 ><触发事件 > ON<表名 > 视图名 >|< 数据库名 >< 模式名>
[FOR EACH ROW]
[WHEN<条件表达式 >]
BEGIN
<PL/SQL语句 >
END

其中的参数说明如下 

(1)OR REPLACE 为可选参数,如果数据库中已经存在要创建的触发器,则先把原先的触发器删除,再重新建立触发器,或者说覆盖原先的触发器。
(2)触发时间包含 BEFORE 和 AFTER 两种,BEFORE指触发器是在触发事件发生之前执行
AFTER 指触发器在触发事件发生之后执行。
(3)触发事件,例如 INSERT,UPDATE,DELETE,CREATE,ALTER,DROP 等。
(4)<PL/SQL语句>是要执行的触发器操作。

DML触发器的创建

DML触发器在执行 DML语句时触发,可以分为INSERT、UPDATE 和 DELETE 操作,可以定义在操作之前或者之后触发,也可以指定为行级触发或者语句级触发。

语句级 DML 触发器的创建

它是默认的 DML触发器的创建,不使用 FOR EACH ROW子句。语句触发器所对应的 DML语句影响表中符合条件的所有行,但触发器只执行一次,并且不再使用 WHEN 条件语句。 

创建触发器,当对emp数据表进行添加记录、更新记录和删除记录的时候,判断是否是工作时间段,如果不是工作时间段,不允许执行

如下图所示,在第2行定义了触发事件和触发时间,在程序中使用条件语句判断当前时间,如果操作不是在规定时间内,则禁止操作。

下图是在非工作时间内向数据表中添加记录的时候,产生错误警告。

在数据表 dept 上创建触发器,当在该表上插入、删除或者更新的时候,记录操作日志

分析:

这个触发器要求当向表中插入、删除或者更新数据的时候,将操作记录下来,因此需要首先建立一个数据表用于记录日志。
创建表的语句如下所示。

CREATE TABLE dept_log(action_user VARCHAR2(20)
action name VARCHAR2(20),
action time DATE)

程序代码如图所示

如上图所示,在触发器中主要使用了3个条件谓词“INSERTING”“DELETING”和“UPDATING”分别表示触发条件是否是“插入”“删除”和“更新”。

如果条件成立,则返回TRUE,否则返回FALSE。根据不同情况,向记录日志的数据表中添加操作日志。
触发器创建完成后,可以向数据表 dept 中分别插入一条数据和删除一条数据,然后查询新建立的日志表,如下图所示。

我们可以发现,新建立的日志表记录了对数据表的每一笔操作。

行级 DML 触发器的创建

行级 DML 触发器必须加入 FOR EACH ROW 子句,和语句级 DML触发器不一样,行级 DML 触发器在每次执行 DML操作的时候,如果操作一条记录,触发器就执行一次,如果涉及多条记录,那么触发器就执行多次。

在行级触发器中可以使用 WHEN 条件语句控制触发器的执行。

在行级触发器中,会使用两个标识符,即:OLD 和 :NEW,用于访问和操作当前正在处理记录中的数据。

:OLD 表示在 DML操作完成前记录的值;:NEW 表示在 DML操作完成时记录的值。

这两个标识符在不同的 DML操作下有不同的含义。
如果触发操作时,在INSERT情况下,:OLD标识符没有定义,其中所有字段内容是NULL
而:NEW 标识符指被插入的记录。

如果触发操作时,在UPDATE情况下,:OLD标识符指更新前的记录,:NEW标识符指更新后的记录如果触发操作时,在 DELETE 情况下,:OLD 标识符指被删除前的记录,而:NEW 标识符没有定义
其中所有字段内容是 NULL。在触发器内使用这两个标识符的时候,标识符后面必须跟字段名称,

例如:OLD.FIELD 或者:NEWFIELD,即不能直接使用这两个标识符引用整个记录。

此外,在条件语句 WHEN 中如果用到这两个标识符,则标识符前的“:”可以省略。

为 emp 数据表创建一个触发器,当插入新员工的时候,显示新员工的工号和姓名;当更新员工工资的时候,显示每个员工更新前后的工资;当删除员工的时候,显示被删除员工的工号和姓名

分析

:这是一个行级触发器的创建,同时在触发器内还要判断是哪种 DML 操作。

详细代码如下图所示。

如上图所示,在程序中分别使用:NEW和 :OLD 标识符实现 DML操作前后数据的获取。

此外还使用了3个条件谓词“INSERTING”“DELETING”和“UPDATING”来判断不同的 DML操作,并根据不同的操作显示不同的信息。
创建触发器完成后,可以分别插入、删除和更新数据,如下图所示。

我们可以看出,当更新数据的时候,触发器执行了多次,因为更新的部门有4条符合条件的记录因此触发器执行了4次。
行级触发器经常用于为数据表自动生成主键序列值。来看下面这个范例。

创建一个数据表用于存放学生的基本信息,并创建一个序列,然后在表上创建一个触发器,在向表中插入数据的时候,触发所建立的触发器,为学生信息表自动添加主键序列值

首先创建学生信息表

CREATE TABLE student(
stu id INT PRIMARY KEY,
stu_name VARCHAR2(20),
stu_age lNT)

在创建一个序列

CREATE SEQUENCE stu_seg;

我们可以在触发器中使用该序列的 nextval属性获取有序的数值。
下面就创建触发器以实现为学生信息表自动添加学号关键字,程序代码如下图所示。

从上图可以看到,在触发器中将获取的序列值赋予:new.stu_id。
下面就看一下向数据表中插入记录的效果,分别使用两条插入语句。

INSERT INTO student VALUES (10,'zhangsan',25);
INSERT INTO student(stu_name,stu_age) VALUES ('lisi',24);

然后查询数据表的内容,如图所示

我们可以看出,第一条插入语句虽然给出了学生编号为“10”,但是数据表中对应的 ID 却不是这个结果,

它自动在触发器中获取序列的下一个值,第二个插入语句虽然没有给出学生编号的值,仍然自动添加了序列值。 

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

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

相关文章

linux支持vGPU方案

1&#xff0c;查询gpu型号&#xff1a;lspci | grep "NVIDIA\|VGA" PCI Devices 2&#xff0c;下载驱动 官方驱动 | NVIDIA 3&#xff0c;安装 sudo sh NVIDIA-Linux-x86_64-440.118.02.run -no-x-check -no-nouveau-check -no-opengl-files参数说明&#xff1a; …

面试:finalize

一、概述 将资源释放和清理放在finalize方法中非常不好&#xff0c;非常影响性能&#xff0c;严重时甚至会引起OOM&#xff08;Out Of Memory&#xff09;&#xff0c;从Java9开始就被标注为Deprecated&#xff0c;不建议被使用了。 二、两个重要的队列 1、unfinalized 队列 当…

面向对象开发技术(第三周)

回顾 上一堂课主要学习了面向对象编程与非面向对象编程&#xff08;面向功能、过程编程&#xff09;&#xff0c;本节课就重点来看看面向对象编程中的一个具体思想——抽象 面向对象编程的特性&#xff1a;1、封装性 2、继承性 3、多态性 封装&#xff1a;意味着提供服务接口…

基于自注意力机制的长短期记忆神经网络(LSTM-SelfAttention)的回归预测

提示&#xff1a;MATLAB版本需要R2023a以上 基于自注意力机制的长短期记忆神经网络&#xff08;LSTM-SelfAttention&#xff09;是一种用于时序数据预测的模型。这个模型结合了两个不同的结构&#xff0c;即长短期记忆网络&#xff08;LSTM&#xff09;和自注意力机制&#xff…

备考2024年小学生古诗文大会:做做10道历年真题和知识点(持续)

根据往年的安排&#xff0c;2024年上海市小学生古诗文大会预计还有一个月就将启动。我们继续来随机看10道往年的上海小学生古诗文大会真题&#xff0c;这些题目来自我去重、合并后的1700在线题库&#xff0c;每道题我都提供了参考答案和独家解析。 根据往期的经验&#xff0c;只…

【C++】类和对象⑤(static成员 | 友元 | 内部类 | 匿名对象)

&#x1f525;个人主页&#xff1a;Forcible Bug Maker &#x1f525;专栏&#xff1a;C 目录 前言 static静态成员 友元 友元函数 友元类 内部类 匿名对象 结语 前言 本篇主要内容&#xff1a;类和对象的一些知识点补充&#xff0c;包括static静态成员&#xff0c;友…

STM32的Flash读写保护

参考链接 STM32的Flash读写保护&#xff0c;SWD引脚锁的各种解决办法汇总&#xff08;2020-03-10&#xff09;-腾讯云开发者社区-腾讯云 (tencent.com)https://cloud.tencent.com/developer/article/1597959 STM32系列芯片Flash解除写保护的办法 - 知乎 (zhihu.com)https://zh…

调度问题变形的贪心算法分析与实现

调度问题变形的贪心算法分析与实现 一、问题背景与算法描述二、算法正确性证明三、算法实现与分析四、结论 一、问题背景与算法描述 带截止时间和惩罚的单位时间任务调度问题是一个典型的贪心算法应用场景。该问题的目标是最小化超过截止时间导致的惩罚总和。给定一组单位时间…

【AIGC调研系列】大型语言模型如何减少幻觉生成

在解读大型语言模型&#xff08;LLMs&#xff09;中的长格式事实性问题时&#xff0c;我们首先需要认识到这些模型在生成内容时可能会产生与既定事实不一致的情况&#xff0c;这种情况通常被称为“幻觉”[2][3]。这种现象不仅可能导致信息的误传&#xff0c;还可能对社会造成误…

使用nssm把批处理(.bat)文件设置为Windows 服务

本文以canal为例 使用nssm把批处理(.bat)文件设置为Windows 服务 下载 nssm&#xff1a; 前往 nssm 官方网站 下载适用于系统的 nssm 工具。 安装 nssm&#xff1a; 将下载的 nssm 压缩文件解压缩到一个合适的位置&#xff0c;如 D:\nlc\6.Canal-1.1.5\nssm-2.24\win64\nss…

深度学习运算:CUDA 编程简介

一、说明 如今&#xff0c;当我们谈论深度学习时&#xff0c;通常会将其实现与利用 GPU 来提高性能联系起来。GPU&#xff08;图形处理单元&#xff09;最初设计用于加速图像、2D 和 3D 图形的渲染。然而&#xff0c;由于它们能够执行许多并行操作&#xff0c;因此它们的实用性…

kafka启动报错(kafka.common.InconsistentClusterIdException)

文章目录 前言kafka启动报错(kafka.common.InconsistentClusterIdException)1. 查找日志2. 定位问题/解决 前言 如果您觉得有用的话&#xff0c;记得给博主点个赞&#xff0c;评论&#xff0c;收藏一键三连啊&#xff0c;写作不易啊^ _ ^。   而且听说点赞的人每天的运气都不…

SpringCloud系列(17)--将服务消费者Consumer注册进Zookeeper

前言&#xff1a;在上一章节中我们把服务提供者Provider注册进了Zookeeper&#xff0c;而本章节则是关于如何将服务消费者Consumer注册进Zookeeper 1、再次创建一个服务提供者模块&#xff0c;命名为consumerzk-order80 (1)在父工程下新建模块 (2)选择模块的项目类型为Maven并…

稳态视觉诱发电位 (SSVEP) 分类学习系列 (4) :Temporal-Spatial Transformer

稳态视觉诱发电位分类学习系列:Temporal-Spatial Transformer 0. 引言1. 主要贡献2. 提出的方法2.1 解码的主要步骤2.2 网络的主要结构 3. 结果和讨论3.1 在两个数据集下的分类效果3.2 与基线模型的比较3.3 消融实验3.4 t-SNE 可视化 4. 总结欢迎来稿 论文地址&#xff1a;http…

【进阶六】Python实现SDVRPTW(需求拆分)常见求解算法——禁忌搜索+模拟退火算法(TS+SA)

基于python语言&#xff0c;采用经典禁忌搜索&#xff08;TS&#xff09;模拟退火&#xff08;SA&#xff09;对 带硬时间窗的需求拆分车辆路径规划问题&#xff08;SDVRPTW&#xff09; 进行求解。 目录 往期优质资源1. 适用场景2. 代码调整2.1 需求拆分2.2 需求拆分后的服务时…

EureKa技术解析:科技行业的革新风暴(ai写作)

首先&#xff0c;这篇文章是基于笔尖AI写作进行文章创作的&#xff0c;喜欢的宝子&#xff0c;也可以去体验下&#xff0c;解放双手&#xff0c;上班直接摸鱼~ 按照惯例&#xff0c;先介绍下这款笔尖AI写作&#xff0c;宝子也可以直接下滑跳过看正文~ 笔尖Ai写作&#xff1a;…

如何驱动消费者自我裂变,助力平台引流与卖货双重提升

大家好&#xff0c;我是微三云周丽 在浩瀚的商业海洋中&#xff0c;电商行业一直以其独特的魅力和无限的可能性吸引着众多创业者和投资者的目光。近年来&#xff0c;一种被誉为电商模式中的“神盘”——众筹卖货模式&#xff0c;正悄然崭露头角&#xff0c;以其独特的运作方式…

Docker 入门篇(二)-- Linux 环境离线安装

引言 docker 系列文章&#xff1a; Docker 入门篇&#xff08;一&#xff09;-- 简介与安装教程&#xff08;Windows和Linux&#xff09; 一、安装环境准备 centos &#xff1a;CentOS Linux release 7.6.1810 (Core)docker 版本&#xff1a;docker-26.1.0.tgz 官网下载地址…

【RAG 论文】Chain-of-Note:为 RAG 引入 CoT 让模型生成阅读笔记来提高面对噪音文档和未知场景的鲁棒性

论文&#xff1a;Chain-of-Note: Enhancing Robustness in Retrieval-Augmented Language Models ⭐⭐⭐ Tencent AI Lab, arXiv:2311.09210 文章目录 一、论文速读二、实现的细节2.1 Note Design2.2 Data Collection2.3 Model Training 三、实验结果3.1 QA Performance3.2 对 …

虚拟机VMware下ROS Neotic(Ubuntu 20.04)下安装OpenCV

一、ROS安装 ROS的官方安装步骤&#xff1a; 1、noetic / Ubuntu 20.04 &#xff1a; http://wiki.ros.org/noetic/Installation/Ubuntu 2、melodic / Ubuntu 18.04&#xff1a; http://wiki.ros.org/melodic/Installation/Ubuntu 3、kinetic / Ubuntu 16.04&#xff1a; http:…