广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >Oracle 触发器trigger使用案例
  • 610
分享到

Oracle 触发器trigger使用案例

2024-04-02 19:04:59 610人浏览 薄情痞子
摘要

目录一、触发器定义二、触发器分类三、触发器功能四、触发器语法五、触发器使用案例案例1:向job1表中插入一条数据后输出 欢迎加入 语句案例2:数据校验,不允许星期二和星期四向emp1

一、触发器定义

oracle触发器是使用者对Oracle数据库的对象做特定的操作时,触发的一段PL/sql程序代码器。触发的事件包括对表的DML操作,用户的DDL操作以及数据库事件等。

二、触发器分类

触发器分为语句级触发器和行级触发器。

  • 语句级触发器:在某些语句执行前或执行后被触发。
  • 行级触发器:在定义了触发器的表中的行数据改变时就会被触发一次。

按照用户具体的操作事件的类型,可以分为5种触发器。

  • 数据操作(DML)触发器:此触发器是定义在Oracle表上的,当对表执行insert、update、delete操作时可以触发该触发器。如果按照对表中行级数据进行触发或语句级触发,又可以分为行级(row)触发器,语句级触发器,按照修改数据的前后触发触发器,又可以分为 after 触发器和before触发器之分。
  • 数据定义操作(DDL)触发器:当对数据库对象进行create、alter、drop操作时,触发触发器进行一些操作记录保存、或者限定操作。
  • 用户和系统事件触发器:该类型的触发器是作用在Oracle数据库系统上,当进行数据库事件时,触发触发器,一般用来记录登录的相关信息。
  • INSTEAD OF 触发器:此类型的触发器是作用在视图上,当用户对视图进行操作时,触发该触发器把相关的操作转换为对表进行操作。
  • 复合触发器:指的是对数据操作(DML)触发器当中的多种类型触发器进行复合,比如;一个触发器当中包含着after(或before)的行级触发器和after(或before)的语句级触发器,来完成一些更为复杂的操作。

三、触发器功能

Oracle触发器可以根据不同的数据库事件进行特定的调用触发器程序块,因此,它可以帮助开发者完成一些PL/SQL存储过程完成不了的问题,比如:

  • 允许or限制对表的修改
  • 自动生成派生列,比如自增字段(序列)
  • 强制数据一致性
  • 提供审计和日志记录
  • 防止无效的事务处理
  • 启用复杂的业务逻辑

但是不推荐在触发器当中写业务逻辑程序,因为这样对后期数据的维护将大大提高成本。

四、触发器语法

create [or replace] trigger 触发器名称 触发时间 触发事件
on 表名
[for each row]
begin
  PL/SQL语句块
end;

语法解释:
触发器名称:触发器对象的名称,没有实际用途。
触发时间:指定触发器何时执行,有before和after两个值。
before:在数据库动作之前执行触发器
after:在数据库动作之后执行触发器
触发事件:指明哪些数据库动作会触发该触发器
insert 数据库插入时会触发该触发器
update 数据库更新时会触发该触发器
delete 数据库删除时会触发该触发器
表名:数据库触发器所在的表
for each row:对触发器的执行范围做限定,对表的每一行触发器执行一次,如果没有这个选项就是对整个表执行一次

五、触发器使用案例

案例1:向job1表中插入一条数据后输出 欢迎加入 语句

--准备工作:拷贝jobs表为job11表,案例1和案例2均在job1表中执行。
CREATE TABLE JOB1 AS SELECT * FROM HR.JOBS;
--创建触发器
create or replace trigger trigger1 after insert
on job1
begin
  dbms_output.put_line('祝您早日涨薪!');
end;

触发器创建完成后,可向job1表插入一行数据验证效果。

--插入数据,触发触发器的执行
insert into job1 values('ruirui','Prisident',15000,30000);

效果如下:

在这里插入图片描述

案例2:数据校验,不允许星期二和星期四向emp1表中插入/更新数据。

create or replace trigger trigger2 before insert or update 
on job1
declare
  v_day varchar2(20);
begin
  ---判断今天是否是星期二或星期四
  select to_char(sysdate,'day') into v_day from dual;
  ---判断
  if v_day = '星期二' then
    dbms_output.put_line('今天是星期二,不能插入/更新数据!');
    raise_application_error(-20001,'今天是星期二,不能插入/更新数据!');
  if v_day = '星期四' then
    dbms_output.put_line('今天是星期四,不能插入/更新数据!');
    raise_application_error(-20001,'今天是星期四,不能插入/更新数据!');
  end if;
  end if;
end;

触发器创建完成后,可向job1表插入一行数据验证效果。

--插入数据,触发触发器的执行
insert into job1 values('rui1','Prisident',15000,30000);

效果如下:

在这里插入图片描述

在这里插入图片描述

案例3:创建触发器,记录表的删除数据

--创建job1_log表用于记录job1表的删除记录
create table job1_log  as select * from job1 where  1<>1;

--创建触发器
create or replace trigger trigger3 after delete 
on job1
for each row
begin
  insert into job1_log values(:old.job_id,:old.job_title,:old.min_salary,:old.max_salary);
  dbms_output.put_line('记录已经成功删除并记录到日志');
end;

触发器创建完成后,可删除job1表一行数据验证效果。

--测试
delete from job1 where job_id='ruirui';

效果如下:

在这里插入图片描述

在这里插入图片描述

案例4:创建触发器,记录表的更新数据

--创建日志记录表
create table test_log(
  l_user varchar2(15),
  l_type varchar2(15),
  l_date varchar2(20)
);

--创建触发器
create or replace trigger trigger4 after delete or insert or update
on job1
declare
  v_type test_log.l_type%type;
begin
  if deleting then
    v_type := 'delete';
    dbms_output.put_line('记录已经成功删除并记录到日志');
  elsif inserting then
    v_type := 'insert';
    dbms_output.put_line('记录已经成功插入并记录到日志');
  elsif updating then
    v_type := 'update';
    dbms_output.put_line('记录已经成功更新并记录到日志');
  end if;
  insert into test_log values(user,v_type,to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'));
end;

触发器创建完成后,可更新job1表中数据验证效果。

--测试
insert into job1 values('rui1','Prisident',15000,30000);

在这里插入图片描述

update job1 set min_salary=20000 where job_id='rui1';

在这里插入图片描述

delete from job1 where job_id='rui1';

在这里插入图片描述

查询test_log表中记录如下:

select * from test_log;

在这里插入图片描述

案例5:创建触发器,在删除某条数据之前先在记录表插入该条数据

--创建job1_log表用于记录job1表的删除记录
create table test1_log  as select * from job1 where  1<>1;

--创建触发器
create or replace trigger trigger5 before delete on job1
for each row --行级触发器
begin
  insert into test1_log values(:old.job_id,:old.job_title,:old.min_salary,:old.max_salary);
end;

触发器创建完成后,可更新job1表中数据验证效果。

--测试
delete from job1 where job_id='rui2';
commit;

查询test1_log表中记录如下:

select * from test01_log;

在这里插入图片描述

参考:Oracle数据库 触发器

到此这篇关于Oracle 触发器trigger概述的文章就介绍到这了,更多相关Oracle 触发器trigger内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Oracle 触发器trigger使用案例

本文链接: https://www.lsjlt.com/news/140255.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Oracle 触发器trigger使用案例
    目录一、触发器定义二、触发器分类三、触发器功能四、触发器语法五、触发器使用案例案例1:向job1表中插入一条数据后输出 欢迎加入 语句案例2:数据校验,不允许星期二和星期四向emp1...
    99+
    2022-11-13
  • mysql触发器trigger的使用案例
    这篇文章主要介绍了mysql触发器trigger的使用案例,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。什么是触发器触发器是与表有关的数据库对象,在满足定义条件时触发,并执行...
    99+
    2023-06-14
  • Oracle触发器trigger怎么使用
    Oracle触发器(trigger)用于在指定的数据库操作发生时自动执行一段特定的代码,可以用于数据插入、更新或删除时执行特定的操作...
    99+
    2023-08-15
    Oracle trigger
  • Oracle的触发器trigger如何使用
    本篇内容主要讲解“Oracle的触发器trigger如何使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Oracle的触发器trigger如何使用”吧!一、触发器定义Oracle触发器是使用者...
    99+
    2023-06-29
  • Oracle 触发器详解(trigger)
    Oracle中的触发器是一种特殊的数据库对象,它是与表关联的一段PL/SQL代码,当特定的数据库操作发生时,触发器会自动执行这段代码...
    99+
    2023-09-20
    Oracle
  • Oracle中的触发器trigger
    触发器是指被隐含执行的存储过程 一、创建DML触发器(before/after) 1、行触发器: 当一个DML操作影响DB中的多行时,对于其中复合触发条件的每行均触发一次(for e...
    99+
    2022-11-13
  • Oracle触发器trigger详解
    Oracle触发器(Trigger)是一种特殊的数据库对象,可以在数据库中的某个事件发生时自动执行一系列的操作。触发器通常与数据库表...
    99+
    2023-08-15
    oracle
  • Oracle Trigger触发器的正确使用方法
    Oracle Trigger是一种在数据库中定义的特殊对象,它可以在特定的数据库操作(如插入、更新或删除)发生时自动触发相关的操作。...
    99+
    2023-09-23
    Oracle
  • MySQL触发器trigger的使用
    Q:什么是触发器?A:  触发器是与表有关的数据库对象,在满足定义条件时触发,并执行触发器中定义的语句集合。触发器的特性:  1、有begin end体,begin end;之间的语句可以写的简单或者复杂 ...
    99+
    2022-10-18
  • 详解mysql触发器trigger实例
    目录什么是触发器创建触发器现在有表如下:这里再啰嗦几句:限制和注意事项总结数据库触发器有以下的作用:MySQL好像从5.0.2版本就开始支持触发器的功能了,本次博客就来介绍一下触发器...
    99+
    2022-11-12
  • mysql触发器trigger实例详解
    MySQL好像从5.0.2版本就开始支持触发器的功能了,本次博客就来介绍一下触发器,首先还是谈下概念性的东西吧: 什么是触发器 触发器是与表有关的数据库对象,在满足定义条件时触发,并执行触发器中定义的语句集合。触发器...
    99+
    2022-05-22
    mysql 触发器 trigger
  • mysql触发器trigger 实例详解
    https://www.cnblogs.com/phpper/p/7587031.html MySQL好像从5.0.2版本就开始支持触发器的功能了,本次博客就来介绍一下触发器,首先还是谈下概念性的东西吧: 什么是触发器 触发器是与表有关的数...
    99+
    2018-01-18
    mysql触发器trigger 实例详解 数据库入门 数据库基础教程 数据库 mysql
  • oracle 触发器trigger(主键自增长)
    触发器trigger 触发器我们也可以认为是存储过程,是一种特殊的存储过程。 存储过程:有输入参数和输出参数,定义之后需要调用 触发器:没有输入参数和输出参数,定义之后无需调用,在适当的时候会自动执行。 适当的时候:触发器与表相关,当我们对...
    99+
    2014-05-12
    oracle 触发器trigger(主键自增长)
  • Oracle触发器trigger有什么功能
    Oracle触发器(trigger)是一种存储在数据库中的特殊对象,它在指定的数据库事件发生时自动执行一系列的操作。Oracle触发...
    99+
    2023-08-18
    Oracle trigger
  • MySQL的触发器trigger怎么使用
    MySQL的触发器(trigger)可以在特定的数据库操作发生时自动执行一系列的SQL语句。触发器可以在插入、更新或删除数据时触发执...
    99+
    2023-08-11
    MySQL trigger
  • Java Flink窗口触发器Trigger怎么使用
    这篇文章主要介绍“Java Flink窗口触发器Trigger怎么使用”,在日常操作中,相信很多人在Java Flink窗口触发器Trigger怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对...
    99+
    2023-07-02
  • MySQL数据库触发器trigger怎么使用
    这篇文章主要讲解了“MySQL数据库触发器trigger怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“MySQL数据库触发器trigger怎么使用”吧!一、基本概念触发器是一种特殊类...
    99+
    2023-07-02
  • 数据库中触发器trigger怎么用
    这篇文章主要介绍了数据库中触发器trigger怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。 实验如下:-...
    99+
    2022-10-19
  • JavaFlink窗口触发器Trigger的用法详解
    目录定义Trigger 源码TriggerResult 源码Flink 预置的TriggerEventTimeTrigger源码ProcessingTimeTrigger源码常见窗口...
    99+
    2022-11-13
  • Oracle DML触发器和DDL触发器实例详解
    目录一、概念二、DML触发器2.1、语句触发器2.2、行级触发器2.3、DML触发器语法:2.4、触发器谓词:2.5、实例说明三、DDL 触发器3.1、DDL触发器语法3.2、DDL...
    99+
    2023-03-13
    oracle 触发器 oracle触发器语句 oracle创建触发器语句
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作