龙空技术网

从零开始学习Oracle之触发器

ITPro进化论 42

前言:

当前你们对“oracle存储过程alter”可能比较着重,看官们都需要学习一些“oracle存储过程alter”的相关文章。那么小编在网摘上汇集了一些有关“oracle存储过程alter””的相关知识,希望咱们能喜欢,大家快快来了解一下吧!

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

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

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

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

CREATE TRIGGER TRIGGER_NAME trigger_time trigger_eventON 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_eventON tbl_name FOR EACH ROW trigger_stmt
2.查看触发器

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

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

SELECT OBJECT NAME FROM USER_OBJECTSWHERE OBJECT_TYOE='TRIGGER';

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

SELECT * FROM USER_SOURCE WHERE NAME= 'INS_SUM' ORDER BY LINE;
3.触发器的使用

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

触发器的使用步骤如下:

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

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

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

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

4.修改触发器

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

首先,使用管理员权限登录到Oracle数据库。使用ALTER TRIGGER语句修改触发器的定义。语法如下:

   ALTER TRIGGER trigger_name [ENABLE | DISABLE | COMPILE | RECOMPILE]
trigger_name是要修改的触发器的名称。ENABLE用于启用触发器;DISABLE用于禁用触发器;COMPILE用于编译触发器;RECOMPILE用于重新编译触发器。如果需要修改触发器的代码逻辑,可以使用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部分可以用于定义触发器的局部变量。修改完触发器的定义后,使用COMMIT语句提交修改。

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

5.删除触发器

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

DROP TRIGGER trigger_name;

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

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

6.注意事项

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

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

标签: #oracle存储过程alter #oracle开启命令 #oracle触发器怎么写 #oracle触发器备份 #oracle安装报错ins30131