在oracle中,触发器分为三类,行触发,语句触发、替代触发,这里讨论语句触发,因为在语句级触发器没有new和OLd可以访问历史数据,但是很多情况是必须使用这些刚刚更新或删除的数据进行其他操作,下面提供一种解决方法:首先定义一种表类型 的结构,然后创建一个行级触发器,这个触发器仅做一个操作,就是利用old、new记录刚刚操作的数据,然后创建一个语句级触发器,在这个语句级触发器里面执行相应的业务操作。具体实现如下:(两个表f分别为aaaa,aaaa_log,功能就是删除aaaa的数据记录到aaaa_log中)
-- 创建一个包 , create or replace package tri_pkg as type TempTable is table of aaaa%rowtype index by binary_integer ; oldrows TempTable; oldemptyrows TempTable; end tri_pkg; -- 做删除前清空初始化数据 create or replace trigger aaaa_delete_empty before delete on aaaa begin tri_pkg.oldrows:=tri_pkg.oldemptyrows; end; -- 行级触发器记录删除的记录 create or replace trigger aaaa_delete_row AFTER delete on aaaa for each row declare num integer :=tri_pkg.oldrows.COUNT+1; begin tri_pkg.oldrows(num).name:=:old.name; tri_pkg.oldrows(num).birthdate:=:old.birthdate; end; -- 语句触发器操作业务 create or replace trigger aaaa_delete AFTER delete on aaaa declare begin for i in 1..tri_pkg.oldrows.COUNT loop insert into aaaa_log(name,birthdate) select tri_pkg.oldrows(i).name ,tri_pkg.oldrows(i).birthdate from dual; end loop; end;
转载请注明地址:
相关推荐
- **DML触发器**:这类触发器可在数据操纵语言(DML)操作前或后触发,适用于单个行或整个语句级别。行级触发器针对每一条受影响的记录分别执行,而语句级触发器则在整个DML语句执行完毕后仅触发一次。 - **替代...
行级触发器在每一行数据被操作时触发,而语句级触发器在整个操作完成后触发。行级触发器常用于逐行处理,而语句级触发器适用于全局操作。 3. **复合触发器** 复合触发器可以在一次操作中响应多个事件,比如在一个...
1. **类型**:Oracle支持三种类型的触发器——行级触发器(处理单个行)、语句级触发器(处理整个SQL语句)和复合触发器(结合了行级和语句级触发器的特性)。 2. **创建触发器**:使用CREATE TRIGGER语句定义...
Oracle数据库提供了多种类型的触发器,包括行级触发器和语句级触发器,以及before和after触发器。 1. **触发器类型**: - **行级触发器**:当单行数据发生变化时触发,对每一行操作都会执行一次。 - **语句级...
Oracle数据库中的触发器是数据库管理系统提供的一种特殊存储过程,它与特定的数据表紧密关联,用于在数据表上执行DML(插入、更新、删除)操作时自动触发一系列预定义的操作,以确保数据的一致性和完整性。触发器...
1. 语句触发器:例如create trigger biud_foo before insert or update or delete on foo 2. 行触发器:例如create trigger biufer_employees_department_id before insert or update of department_id on employees...
2. **行级触发器与语句级触发器**: 行级触发器对操作的每一行执行一次,而语句级触发器在整个操作完成后执行一次。 3. **复合触发器**: 支持在一个触发器中处理多个操作(如INSERT和UPDATE)。 4. **回滚与提交**: ...
触发器是Oracle数据库中一个强大的工具,能够自动化执行复杂的数据库操作,从而简化数据库管理并增强数据的一致性和安全性。通过合理设计和使用触发器,可以有效地支持业务需求,同时减少开发和维护成本。然而,不当...
行级触发器针对受影响的每行数据执行一次,而语句级触发器在整个操作完成后执行一次。 2. **替代触发器(INSTEAD OF)**:当需要对联接多个表的视图进行操作时,由于直接操作视图是不允许的,此时可以使用替代...
它们可以设置为行级或语句级,分别在每行受影响时或整个语句执行后触发。 2. **替代触发器(INSTEAD OF)**:设计用于视图上的操作。Oracle不允许直接对多表视图执行DML操作,替代触发器则允许通过视图间接操作底层...
Oracle触发器是数据库对象,用于在特定的数据库操作(如INSERT、UPDATE或DELETE)发生时自动执行一段PL/SQL代码。触发器可以帮助实现业务规则、数据验证和审计功能。以下是一些实例,详细解释了如何创建和使用Oracle...
- **语句触发器**:针对整个语句执行,无论语句影响多少行,只触发一次。 - **行触发器**:针对每一行数据操作,如`for each row`,在每行数据满足条件时执行。 - **INSTEAD OF触发器**:替代DML操作,而不是在...
通常情况下,在行级触发器中直接使用SELECT查询其他表的数据是被允许的,但有时这种操作会受到约束。例如,在某些数据库系统中,为了避免死锁或循环依赖,可能会禁止触发器内的SELECT语句访问其他表的数据。 #### 3...
在Oracle数据库中,触发器(Triggers)是一种存储过程,它会在特定的数据库事件...总的来说,Oracle中的触发器是数据库级编程的重要工具,合理使用可以增强系统的功能和数据一致性,但需谨慎使用以避免性能和维护问题。
总的来说,触发器是Oracle数据库中不可或缺的一部分,它们使得数据库能够更加智能地响应各种操作,自动化处理许多复杂的数据管理任务。在实际开发中,合理利用触发器可以提高系统的稳定性和数据的准确性,但同时需要...
Oracle触发器是数据库对象,主要用于在特定的数据库操作(如INSERT、UPDATE或DELETE)发生时自动执行预定义的PL/SQL代码。它们是数据库级别的触发,可以用来实施业务规则、保持数据完整性或进行复杂的逻辑处理。以下...
Oracle 的常用语句大全包括数据库创建、用户管理、表结构查询、数据查询、存储过程管理、触发器管理、函数管理、空间管理、会话管理、锁管理等方面。掌握这些语句可以帮助dba和开发者更好地管理和使用 Oracle 数据库...
Oracle数据库是业界广泛使用的关系型数据库管理系统(RDBMS),其功能强大,能够处理大量并发事务处理,是众多企业级应用首选的数据库平台。本知识点将详细介绍Oracle数据库的基础知识、查询语句、体系结构、数据...
在本例中,我们将使用触发器来记录对某张表的操作日志。 #### 三、SQL Server的Inserted和Deleted虚拟表 在SQL Server中,`Inserted`和`Deleted`是两个非常重要的虚拟表,它们用于存储DML(数据操纵语言)操作的...
Oracle中的触发器定义使用`CREATE TRIGGER`语句。触发器的使用应谨慎,因为过度依赖触发器可能导致代码难以理解和维护,同时可能会对性能产生影响。 四、PL/SQL语法基础 PL/SQL由声明部分、执行部分和异常处理部分...