百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

从零开始学习Oracle之触发器

ccwgpt 2024-11-23 12:07 22 浏览 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类型的触发器。灵活地运用触发器将为操作省去很多麻烦。

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

相关推荐

土豪农村建个别墅不新鲜 建个车库都用框架结构?

农村建房子过去都是没车库,也没有那么多豪车,一般直接停在路边或者院子里。现在很多人都会在建房子的时候留一个车库,通过车库可以直接进入客厅,省得雨雪天气折腾。农村土豪都是有钱任性,建房子跟我们普通人不一...

自建框架结构出现裂缝怎么回事?

三层自建房梁底与墙体连接处裂缝是结构问题吗?去前帮我姑画了一份三层自建房的图纸,前天他们全部装修好了。我姑丈突然打电话给我说他发现二层的梁底与墙分离了,有裂缝。也就是图纸中前面8.3米那跨梁与墙体衔接...

钢结构三维图集-框架结构(钢柱对接)

1、实腹式钢柱对接说明1:1.上节钢柱的安装吊点设置在钢柱的上部,利用四个吊点进行吊装;2.吊装前,下节钢柱顶面和本节钢柱底面的渣土和浮锈要清除干净,保证上下节钢柱对接面接触顶紧;3.钢柱吊装到位后...

三层框架结构主体自建房设计案例!布局13*12米占地面积156平米!

绘创意设计乡村好房子设计小编今日头条带来分享一款:三层框架结构主体自建房设计案例!布局13*12米占地面积156平米!本案例设计亮点:这是一款三层新中式框架结构自建房,占地13×12米,户型占地面积...

Casemaker机箱框架结构3D图纸 STEP格式

农村自建房新宠!半框架结构凭啥这么火?内行人揭开3个扎心真相

回老家闲逛,竟发现个有意思的现象:村里盖新房,十家有八家都选了"半框架结构"。隔壁王叔家那栋刚封顶的二层小楼,外墙红砖还露着糙面没勾缝,里头的水泥柱子倒先支棱得笔直,这到底是啥讲究?蹲...

砖混结构与框架结构!究竟有何区别?千万别被坑!

农村自建房选结构,砖混省钱但出事真能保命吗?7月建材价格波动期,多地建房户因安全焦虑陷入选择困境——框架结构虽贵30%,却是地震区保命的关键。框架柱和梁组成的承重体系,受力分散得像一张网。砖混靠墙硬扛...

砖混结构与框架结构,究竟有何区别?千万别被坑!

农村建房选砖混结构还是框架结构?这个问题算是近期留言板里问得最多的问题了。今天咱们说说二者的区别,帮您选个合适的。01成本区别假如盖一栋砖混结构的房子需要30万,那么换成框架结构,一般要多掏30%的费...

6个小众却逆天的App神器,个个都是黑科技的代表

你的手机上有哪些好用的软件?今天我就给大家分享6个小众却逆天的App神器,个个都是黑科技的代表!01*Via浏览器推荐理由:体积极小的浏览器,没有任何广告。使用感受:它的体量真的很小,只有702KB,...

合肥App开发做一个app需要多少钱?制作周期有多久?

在移动互联网时代,开发一款APP已成为企业数字化转型与个人创业的重要途径。然而,APP的开发成本与制作周期受功能复杂度、技术架构、团队类型等多重因素影响,差异极大。好牛软件将从这两个维度展开分析,帮助...

详解应对App臃肿化的五大法则

编者注:本文转自腾讯ISUX。先来看一张图:图上看到,所有平台上用户花费时间都在减少,除了移动端。观察身边也是如此,回家不开电脑的小伙伴越来越多。手机平板加电视,下班场景全搞定。连那些以前电脑苦手的...

实战!如何从零搭建10万级 QPS 大流量、高并发优惠券系统

需求背景春节活动中,多个业务方都有发放优惠券的需求,且对发券的QPS量级有明确的需求。所有的优惠券发放、核销、查询都需要一个新系统来承载。因此,我们需要设计、开发一个能够支持十万级QPS的券系...

8种移动APP导航设计模式大对比

当我们确定了移动APP的设计需求和APP产品设计流程之后,开始着手设计APP界面UI或是APP原型图啦。这个时候我们都要面临的第一个问题就是如何将信息以最优的方式组合起来?也许我们对比和了解了其他一些...

数字资产支付 App 的技术框架

开发一款功能强大、安全可靠的数字资产支付App需要一个整合了区块链技术、后端服务、前端应用以及第三方集成的全栈技术框架。这个框架的核心在于保障数字资产的安全流通,并将其高效地桥接到传统的法币支付场...

从MyBatis到App架构:设计模式全景应用指南

从MyBatis到App架构:设计模式全景应用指南引言在企业级应用和服务端开发领域,MyBatis凭借其灵活、简洁、强大的ORM映射能力被广泛应用。而它之所以能拥有如此优秀的可扩展性和工程可维护性,正...

取消回复欢迎 发表评论: