我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Oracle 触发器trigger使用案例

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Oracle 触发器trigger使用案例

一、触发器定义

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内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Oracle 触发器trigger使用案例

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

下载Word文档

猜你喜欢

mysql触发器trigger的使用案例

这篇文章主要介绍了mysql触发器trigger的使用案例,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。什么是触发器触发器是与表有关的数据库对象,在满足定义条件时触发,并执行
2023-06-14

Oracle触发器trigger怎么使用

Oracle触发器(trigger)用于在指定的数据库操作发生时自动执行一段特定的代码,可以用于数据插入、更新或删除时执行特定的操作。以下是使用Oracle触发器的基本步骤:1. 创建一个触发器:```CREATE OR REPLACE T
2023-08-15

Oracle的触发器trigger如何使用

本篇内容主要讲解“Oracle的触发器trigger如何使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Oracle的触发器trigger如何使用”吧!一、触发器定义Oracle触发器是使用者
2023-06-29

Oracle 触发器详解(trigger)

Oracle中的触发器是一种特殊的数据库对象,它是与表关联的一段PL/SQL代码,当特定的数据库操作发生时,触发器会自动执行这段代码。触发器可以在INSERT、UPDATE或DELETE等操作前或后触发,用于实现数据库的业务逻辑。触发器的创
2023-09-20

Oracle触发器trigger详解

Oracle触发器(Trigger)是一种特殊的数据库对象,可以在数据库中的某个事件发生时自动执行一系列的操作。触发器通常与数据库表相关联,当对表进行插入、更新或删除操作时,触发器会自动触发并执行相应的操作。触发器可以在以下几种情况下触发执
2023-08-15

Oracle Trigger触发器的正确使用方法

Oracle Trigger是一种在数据库中定义的特殊对象,它可以在特定的数据库操作(如插入、更新或删除)发生时自动触发相关的操作。以下是Oracle Trigger的正确使用方法:1. 创建Trigger:使用CREATE TRIGGER
2023-09-23

mysql触发器trigger 实例详解

https://www.cnblogs.com/phpper/p/7587031.htmlMySQL好像从5.0.2版本就开始支持触发器的功能了,本次博客就来介绍一下触发器,首先还是谈下概念性的东西吧:什么是触发器触发器是与表有关的数据库对象,在满足定义条件时
mysql触发器trigger 实例详解
2018-01-18

mysql触发器trigger实例详解

MySQL好像从5.0.2版本就开始支持触发器的功能了,本次博客就来介绍一下触发器,首先还是谈下概念性的东西吧: 什么是触发器 触发器是与表有关的数据库对象,在满足定义条件时触发,并执行触发器中定义的语句集合。触发器的这种特性可以协助应用在
2022-05-22

MySQL的触发器trigger怎么使用

MySQL的触发器(trigger)可以在特定的数据库操作发生时自动执行一系列的SQL语句。触发器可以在插入、更新或删除数据时触发执行,可以用于实现数据的验证、复制或自动化处理等功能。以下是MySQL中触发器的使用方法:1. 创建触发器:使
2023-08-11

Oracle触发器trigger有什么功能

Oracle触发器(trigger)是一种存储在数据库中的特殊对象,它在指定的数据库事件发生时自动执行一系列的操作。Oracle触发器有以下功能:1. 数据完整性:触发器可以用于确保数据的完整性和一致性。当进行插入、更新或删除操作时,触发器
2023-08-18

oracle 触发器trigger(主键自增长)

触发器trigger触发器我们也可以认为是存储过程,是一种特殊的存储过程。存储过程:有输入参数和输出参数,定义之后需要调用触发器:没有输入参数和输出参数,定义之后无需调用,在适当的时候会自动执行。适当的时候:触发器与表相关,当我们对这个相关的表中的数据进行DD
2014-05-12

Java Flink窗口触发器Trigger怎么使用

这篇文章主要介绍“Java Flink窗口触发器Trigger怎么使用”,在日常操作中,相信很多人在Java Flink窗口触发器Trigger怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java
2023-07-02

MySQL数据库触发器trigger怎么使用

这篇文章主要讲解了“MySQL数据库触发器trigger怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“MySQL数据库触发器trigger怎么使用”吧!一、基本概念触发器是一种特殊类
2023-07-02

Oracle DML触发器和DDL触发器怎么使用

今天小编给大家分享一下Oracle DML触发器和DDL触发器怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、概念
2023-07-05

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录