首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

从零开始学习Oracle之触发器

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

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

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

1.创建触发器

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

TRIGGER NAME标识触发器名称,用户自行指定;

trigger time标识触发时机,可以指定为before或after;

trigger_event标识触发事件,包括INSERT、UPDATE和DELETE;

tbl _name 标识建立触发器的表名,即在哪张表上建立触发器;

trigger_stmt 是触发器程序体。

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

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

2.查看触发器

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

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

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

3.触发器的使用

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

触发器的使用步骤如下:

创建触发器:使用CREATE TRIGGER语句创建触发器,指定触发器的名称、触发时机(BEFORE或AFTER)、触发的数据库操作(INSERT、UPDATE或DELETE)、触发的表名等信息。

定义触发器的触发事件:在触发器中定义触发事件,即当满足一定条件时触发触发器的执行。可以使用IF语句、CASE语句等来定义触发事件。

编写触发器的执行代码:在触发器中编写需要执行的代码,可以是SQL语句、PL/SQL块等。触发器可以访问和修改触发事件所在表的数据。

启用触发器:使用ALTER TRIGGER语句启用触发器,使其生效。

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

数据完整性的维护:通过触发器可以在插入、更新、删除数据时进行一些检查,确保数据的完整性,如检查外键约束、检查数据范围等。

数据自动化处理:通过触发器可以实现一些自动化的数据处理操作,如在插入数据时自动生成一些计算字段、在更新数据时自动更新相关字段等。

业务规则的实施:通过触发器可以实现一些业务规则的实施,如在插入、更新、删除数据时触发一些业务逻辑的执行。

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

4.修改触发器

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

首先,使用管理员权限登录到Oracle数据库。

使用ALTER TRIGGER语句修改触发器的定义。语法如下:

trigger_name是要修改的触发器的名称。

ENABLE用于启用触发器;

DISABLE用于禁用触发器;

COMPILE用于编译触发器;

RECOMPILE用于重新编译触发器。

如果需要修改触发器的代码逻辑,可以使用CREATE OR REPLACE TRIGGER语句重新定义触发器。语法如下:

trigger_name是要修改的触发器的名称;

table_name是触发器所在的表名;

BEFORE或AFTER关键字用于指定触发器的执行时机;

INSERT、UPDATE或DELETE关键字用于指定触发器的触发事件;

FOR EACH ROW表示触发器对每一行数据都会执行;

DECLARE部分可以用于定义触发器的局部变量。

修改完触发器的定义后,使用COMMIT语句提交修改。

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

5.删除触发器

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

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

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

6.注意事项

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

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

  • 发表于:
  • 原文链接https://page.om.qq.com/page/Oj5belIHlgbtXY3_ycX4V7cQ0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券