`
yuexiaodong
  • 浏览: 70564 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

oracle语句级触发器使用操作的历史数据

阅读更多

在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;

 

转载请注明地址:

http://yuexiaodong.iteye.com/blog/1887375

0
2
分享到:
评论

相关推荐

    关于oracle触发器before和after的应用问题

    - **DML触发器**:这类触发器可在数据操纵语言(DML)操作前或后触发,适用于单个行或整个语句级别。行级触发器针对每一条受影响的记录分别执行,而语句级触发器则在整个DML语句执行完毕后仅触发一次。 - **替代...

    Oracle触发器与存储过程高级编程

    行级触发器在每一行数据被操作时触发,而语句级触发器在整个操作完成后触发。行级触发器常用于逐行处理,而语句级触发器适用于全局操作。 3. **复合触发器** 复合触发器可以在一次操作中响应多个事件,比如在一个...

    Oracle触发器与存储过程高级编程(chm)

    1. **类型**:Oracle支持三种类型的触发器——行级触发器(处理单个行)、语句级触发器(处理整个SQL语句)和复合触发器(结合了行级和语句级触发器的特性)。 2. **创建触发器**:使用CREATE TRIGGER语句定义...

    oracle触发器功能介绍

    Oracle数据库提供了多种类型的触发器,包括行级触发器和语句级触发器,以及before和after触发器。 1. **触发器类型**: - **行级触发器**:当单行数据发生变化时触发,对每一行操作都会执行一次。 - **语句级...

    Oracle第9章触发器操作.pptx

    Oracle数据库中的触发器是数据库管理系统提供的一种特殊存储过程,它与特定的数据表紧密关联,用于在数据表上执行DML(插入、更新、删除)操作时自动触发一系列预定义的操作,以确保数据的一致性和完整性。触发器...

    Oracle触发器 实例讲解

    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...

    oracle触发器与存储过程高级编程

    2. **行级触发器与语句级触发器**: 行级触发器对操作的每一行执行一次,而语句级触发器在整个操作完成后执行一次。 3. **复合触发器**: 支持在一个触发器中处理多个操作(如INSERT和UPDATE)。 4. **回滚与提交**: ...

    ORACLE触发器、内置程序包教学.doc )

    触发器是Oracle数据库中一个强大的工具,能够自动化执行复杂的数据库操作,从而简化数据库管理并增强数据的一致性和安全性。通过合理设计和使用触发器,可以有效地支持业务需求,同时减少开发和维护成本。然而,不当...

    把ORACLE触发器说透

    行级触发器针对受影响的每行数据执行一次,而语句级触发器在整个操作完成后执行一次。 2. **替代触发器(INSTEAD OF)**:当需要对联接多个表的视图进行操作时,由于直接操作视图是不允许的,此时可以使用替代...

    把触发器说透

    它们可以设置为行级或语句级,分别在每行受影响时或整个语句执行后触发。 2. **替代触发器(INSTEAD OF)**:设计用于视图上的操作。Oracle不允许直接对多表视图执行DML操作,替代触发器则允许通过视图间接操作底层...

    oracle触发器实例讲解

    Oracle触发器是数据库对象,用于在特定的数据库操作(如INSERT、UPDATE或DELETE)发生时自动执行一段PL/SQL代码。触发器可以帮助实现业务规则、数据验证和审计功能。以下是一些实例,详细解释了如何创建和使用Oracle...

    oracle触发器.doc

    - **语句触发器**:针对整个语句执行,无论语句影响多少行,只触发一次。 - **行触发器**:针对每一行数据操作,如`for each row`,在每行数据满足条件时执行。 - **INSTEAD OF触发器**:替代DML操作,而不是在...

    行级触发器不能读.txt

    通常情况下,在行级触发器中直接使用SELECT查询其他表的数据是被允许的,但有时这种操作会受到约束。例如,在某些数据库系统中,为了避免死锁或循环依赖,可能会禁止触发器内的SELECT语句访问其他表的数据。 #### 3...

    orcle中触发器的使用

    在Oracle数据库中,触发器(Triggers)是一种存储过程,它会在特定的数据库事件...总的来说,Oracle中的触发器是数据库级编程的重要工具,合理使用可以增强系统的功能和数据一致性,但需谨慎使用以避免性能和维护问题。

    触发器在Oracle数据库中的应用研究.pdf

    总的来说,触发器是Oracle数据库中不可或缺的一部分,它们使得数据库能够更加智能地响应各种操作,自动化处理许多复杂的数据管理任务。在实际开发中,合理利用触发器可以提高系统的稳定性和数据的准确性,但同时需要...

    Oracle 触发器的使用小结

    Oracle触发器是数据库对象,主要用于在特定的数据库操作(如INSERT、UPDATE或DELETE)发生时自动执行预定义的PL/SQL代码。它们是数据库级别的触发,可以用来实施业务规则、保持数据完整性或进行复杂的逻辑处理。以下...

    oracle常用语句大全

    Oracle 的常用语句大全包括数据库创建、用户管理、表结构查询、数据查询、存储过程管理、触发器管理、函数管理、空间管理、会话管理、锁管理等方面。掌握这些语句可以帮助dba和开发者更好地管理和使用 Oracle 数据库...

    Oracle教程

    Oracle数据库是业界广泛使用的关系型数据库管理系统(RDBMS),其功能强大,能够处理大量并发事务处理,是众多企业级应用首选的数据库平台。本知识点将详细介绍Oracle数据库的基础知识、查询语句、体系结构、数据...

    触发器实现sql记录

    在本例中,我们将使用触发器来记录对某张表的操作日志。 #### 三、SQL Server的Inserted和Deleted虚拟表 在SQL Server中,`Inserted`和`Deleted`是两个非常重要的虚拟表,它们用于存储DML(数据操纵语言)操作的...

    oracle pl/sql 存储过程和函数与触发器

    Oracle中的触发器定义使用`CREATE TRIGGER`语句。触发器的使用应谨慎,因为过度依赖触发器可能导致代码难以理解和维护,同时可能会对性能产生影响。 四、PL/SQL语法基础 PL/SQL由声明部分、执行部分和异常处理部分...

Global site tag (gtag.js) - Google Analytics