百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 优雅编程 > 正文

从零开始学习Oracle之触发器(oracle触发器工作原理)

sinye56 2024-09-27 21:33 6 浏览 0 评论

Oracle的触发器和存储过程一样,都是嵌入到Oracle的一段程序。触发器是由事件来触发某个操作,这些事件包括INSERT、UPDATAE和DELETE语句。如果定义了触发程序,当数据库执行这些语句的时候就会激发触发器执行相应的操作,触发程序是与表有关的命名数据库对象,当表上出现特定事件时,将激活该对象。

触发器(trigger)是个特殊的存储过程,不同的是,执行存储过程要使用EXEC语句来调用,而触发器的执行不需要使用EXEC语句来调用,也不需要手工启动,只要当一个预定义的事件发生的时候,就会被Oracle自动调用。

触发器可以查询其他表,而且可以包含复杂的SQL语句。它主要用于满足复杂的业务规则或要求。

1.创建触发器

1.1创建只有一个执行语句的触发器

CREATE TRIGGER TRIGGER_NAME trigger_time trigger_event
ON tbl_name FOR EACH ROW trigger_stmt
  • TRIGGER NAME标识触发器名称,用户自行指定;
  • trigger time标识触发时机,可以指定为before或after;
  • trigger_event标识触发事件,包括INSERT、UPDATE和DELETE;
  • tbl _name 标识建立触发器的表名,即在哪张表上建立触发器;
  • trigger_stmt 是触发器程序体。

触发器程序可以使用BEGIN和END作为开始和结束,中间包含多条语句。

1.2创建有多个执行语句的触发器

CREATE TRIGGER TRIGGER_NAME trigger_time trigger_event
ON tbl_name FOR EACH ROW trigger_stmt

2.查看触发器

查看触发器是指查看数据库中已存在的触发器的定义、状态和语法信息等。我们可以通过命令来查看已经创建的触发器。

查看触发器的名称,命令如下:

SELECT OBJECT NAME FROM USER_OBJECTS
WHERE OBJECT_TYOE='TRIGGER';

查看INS_SUM触发器的内容信息命令如下:

SELECT * FROM USER_SOURCE WHERE NAME= 'INS_SUM' ORDER BY LINE;

3.触发器的使用

触发程序是与表有关的命名数据库对象,当表上出现特定事件时,将激活该对象。在某些触发程序的用法中,可用于检查插入到表中的值,或对更新涉及的值进行计算。触发程序与表相关,当对表执行INSERT、DELETE或UPDATE语句时,将激活触发程序。可以将触发程序设置为在执行语句之前或之后激活。例如,可以在从表中删除每一行之前,或在更新每一行之后激活触发程序。

触发器的使用步骤如下:

  1. 创建触发器:使用CREATE TRIGGER语句创建触发器,指定触发器的名称、触发时机(BEFORE或AFTER)、触发的数据库操作(INSERT、UPDATE或DELETE)、触发的表名等信息。
  2. 定义触发器的触发事件:在触发器中定义触发事件,即当满足一定条件时触发触发器的执行。可以使用IF语句、CASE语句等来定义触发事件。
  3. 编写触发器的执行代码:在触发器中编写需要执行的代码,可以是SQL语句、PL/SQL块等。触发器可以访问和修改触发事件所在表的数据。
  4. 启用触发器:使用ALTER TRIGGER语句启用触发器,使其生效。

触发器的一些常见应用场景包括:

  • 数据完整性的维护:通过触发器可以在插入、更新、删除数据时进行一些检查,确保数据的完整性,如检查外键约束、检查数据范围等。
  • 数据自动化处理:通过触发器可以实现一些自动化的数据处理操作,如在插入数据时自动生成一些计算字段、在更新数据时自动更新相关字段等。
  • 业务规则的实施:通过触发器可以实现一些业务规则的实施,如在插入、更新、删除数据时触发一些业务逻辑的执行。

需要注意的是,触发器的使用应谨慎,过多或复杂的触发器可能会影响数据库的性能。在设计和使用触发器时,需要考虑数据库的性能和可维护性。

4.修改触发器

要修改Oracle触发器,可以按照以下步骤进行操作:

  1. 首先,使用管理员权限登录到Oracle数据库。
  2. 使用ALTER TRIGGER语句修改触发器的定义。语法如下:
   ALTER TRIGGER trigger_name [ENABLE | DISABLE | COMPILE | RECOMPILE]
  • trigger_name是要修改的触发器的名称。
  • ENABLE用于启用触发器;
  • DISABLE用于禁用触发器;
  • COMPILE用于编译触发器;
  • RECOMPILE用于重新编译触发器。
  1. 如果需要修改触发器的代码逻辑,可以使用CREATE OR REPLACE TRIGGER语句重新定义触发器。语法如下:
   CREATE OR REPLACE TRIGGER trigger_name [BEFORE | AFTER] {INSERT | UPDATE | DELETE} ON table_name
   [FOR EACH ROW]
   [DECLARE]
   -- 触发器代码逻辑
   BEGIN
   -- 触发器代码逻辑
   END;
  • trigger_name是要修改的触发器的名称;
  • table_name是触发器所在的表名;
  • BEFORE或AFTER关键字用于指定触发器的执行时机;
  • INSERT、UPDATE或DELETE关键字用于指定触发器的触发事件;
  • FOR EACH ROW表示触发器对每一行数据都会执行;
  • DECLARE部分可以用于定义触发器的局部变量。
  1. 修改完触发器的定义后,使用COMMIT语句提交修改。

请注意,在修改触发器之前,建议先备份数据库以防止意外情况发生。另外,修改触发器可能会对数据库的正常运行产生影响,建议在非高峰期进行操作,并在修改完成后进行充分的测试。

5.删除触发器

要删除Oracle数据库中的触发器,可以使用以下语法:

DROP TRIGGER trigger_name;

其中,trigger_name是要删除的触发器的名称。

请注意,只有具有足够权限的用户才能删除触发器。

6.注意事项

在使用触发器的时候需要注意,对于相同的表,相同的事件只能创建一个触发器,比如对表account创建了一个BEFORE INSERT触发器,那么如果对表account再次创建一个BEFORE INSERT触发器,Oracle将会报错。此时,只可以在表account上创建AFTER INSERT或者BEFORE UPDATE类型的触发器。灵活地运用触发器将为操作省去很多麻烦。

触发器定义之后,每次执行触发事件,都会激活触发器并执行触发器中的语句。如果需求发生变化,而触发器没有进行相应的改变或者删除,则触发器仍然会执行旧的语句,从而影响新数据的完整性。因此,要将不再使用的触发器及时删除。

相关推荐

Linux在线安装JDK1.8

首先在服务器pingwww.baidu.com查看是否可以连网然后就可以在线下载一、下载安装JDK1.81、在下载安装的同时做好一些准备工作...

Linux安装JDK,超详细

1、了解RPMRPM是Red-HatPackageManager(RPM软件包管理器)的缩写,这一文件格式名称虽然打上了RedHat的标志,但是其原始设计理念是开放式的,现在包括OpenLinux...

Linux安装jdk1.8(超级详细)

前言最近刚购买了一台阿里云的服务器准备要搭建一个网站,正好将网站的一个完整搭建过程分享给大家!#一、下载jdk1.8首先我们需要去下载linux版本的jdk1.8安装包,我们有两种方式去下载安装...

Linux系统安装JDK教程

下载jdk-8u151-linux-x64.tar.gz下载地址:https://www.oracle.com/technetwork/java/javase/downloads/index.ht...

干货|JDK下载安装与环境变量配置图文教程「超详细」

1.JDK介绍1.1什么是JDK?SUN公司提供了一套Java开发环境,简称JDK(JavaDevelopmentKit),它是整个Java的核心,其中包括Java编译器、Java运行工具、Jav...

Linux下安装jdk1.8

一、安装环境操作系统:CentOSLinuxrelease7.6.1810(Core)JDK版本:1.8二、安装步骤1.下载安装包...

Linux上安装JDK

以CentOS为例。检查是否已安装过jdk。yumlist--installed|grepjdk或者...

Linux系统的一些常用目录以及介绍

根目录(/):“/”目录也称为根目录,位于Linux文件系统目录结构的顶层。在很多系统中,“/”目录是系统中的唯一分区。如果还有其他分区,必须挂载到“/”目录下某个位置。整个目录结构呈树形结构,因此也...

Linux系统目录结构

一、系统目录结构几乎所有的计算机操作系统都是使用目录结构组织文件。具体来说就是在一个目录中存放子目录和文件,而在子目录中又会进一步存放子目录和文件,以此类推形成一个树状的文件结构,由于其结构很像一棵树...

Linux文件查找

在Linux下通常find不很常用的,因为速度慢(find是直接查找硬盘),通常我们都是先使用whereis或者是locate来检查,如果真的找不到了,才以find来搜寻。为什么...

嵌入式linux基本操作之查找文件

对于很多初学者来说都习惯用windows操作系统,对于这个系统来说查找一个文件简直不在话下。而学习嵌入式开发行业之后,发现所用到的是嵌入式Linux操作系统,本想着跟windows类似,结果在操作的时...

linux系统查看软件安装目录的方法

linux系统下怎么查看软件安装的目录?方法1:whereis软件名以查询nginx为例子...

Linux下如何对目录中的文件进行统计

统计目录中的文件数量...

Linux常见文件目录管理命令

touch用于创建空白文件touch文件名称mkdir用于创建空白目录还可以通过参数-p创建递归的目录...

Linux常用查找文件方法总结

一、前言Linux系统提供了多种查找文件的命令,而且每种查找命令都具有其独特的优势,下面详细总结一下常用的几个Linux查找命令。二、which命令查找类型:二进制文件;...

取消回复欢迎 发表评论: