`

Oracle数据库使用触发器记录表数据修改记录

阅读更多
--日志记录表
CREATE TABLE T_LOG
(
  RID      VARCHAR2(32 BYTE),
  NAME      VARCHAR2(1000 BYTE),
  RQ        DATE      DEFAULT sysdate,
  OLDVALUE  VARCHAR2(255 BYTE),
  NEWVALUE  VARCHAR2(255 BYTE)
);

CREATE INDEX IDX_T_LOG_RID ON T_LOG (RID);

--目标表
CREATE TABLE T_TARGET
(
  id char(32 BYTE),
  NAME      VARCHAR2(20 BYTE),
  salary        number,
  birthday date
);

alter table T_TARGET  add constraint  primary key (id);

--触发器

CREATE OR REPLACE TRIGGER TR_TARGET_MODIFYLOG
AFTER UPDATE
ON T_TARGET
REFERENCING NEW AS New OLD AS Old
FOR EACH ROW
DECLARE
BEGIN
  if :new.birthday<>:old.birthday 
    or nvl2(:new.birthday,1,0)+nvl2(:old.birthday,1,0)=1 
  then 
  	 insert into T_LOG (rid,name,newvalue,oldvalue)
  	 		values(:new.id,'生日',
  	 		  to_char(:new.birthday,'yyyy-mm-dd'),
  	 		  to_char(:old.birthday,'yyyy-mm-dd'));
  end if;
  if :new.name<>:old.name 
    or nvl2(:new.name,1,0)+nvl2(:old.name,1,0)=1 
  then 
  	 insert into t_log (rid,name,newvalue,oldvalue)
  	 		values(:new.id,'姓名',:new.name,:old.name);
  end if;
  if :new.salary<>:old.salary 
    or nvl2(:new.salary,1,0)+nvl2(:old.salary,1,0)=1 
  then 
  	 insert into t_log (rid,name,newvalue,oldvalue)
  	 		values(:new.id,'工资',:new.salary,:old.salary);
  end if;
END TR_TARGET_MODIFYLOG;
/

分享到:
评论

相关推荐

    ORACLE统计表记录数

    ORACLE 数据库中如何统计表记录数的过程说明

    神通数据库-数据库快速入门.pdf

    神通数据库触发器按照所触发动作的间隔尺寸可以分为语句级触发器和行 级触发器。触发器由 CREATE TRIGGER 语句定义,FOR EACH 子句定义了触发动作的间隔尺寸,它既 可以是 FOR EACH STATEMENT(语句级触发器),也...

    Oracle数据库SQL基本应用与介绍

    Oracle是能够安装在目前为止所有的计算机上并进行驱动运行的关系型数据库管理系统。Oracle数据库内部的数据操作...Oracle数据库对象:cluster、数据库联接、触发器、外部程序库、索引、Java类、演算子、表、视图等等

    详解oracle中通过触发器记录每个语句影响总行数

    详解oracle中通过触发器记录每个语句影响总行数 需求产生:  业务系统中,有一步“抽数”流程,就是把一些数据从其它服务器同步到本库的目标表。这个过程有可能 多人同时抽数,互相影响。有测试人员反应,原来抽过...

    Oracle数据库表序列ID自增生成器

    Oracle数据库表序列ID自增生成器的功能是为数据库中的表添加序列和触发器,以便使数据表的主键ID能够随着记录的增加而自动增加。

    Oracle基于日志的数据备份

    同步CDC主要是采用触发器记录新增数据,基本能够做到实时增量抽取。而异步CDC则是通过分析已经commit的日志记录来得到增量数据信息,有一定的时间延迟,并且提供了到Oracle Streams的接口。异步CDC只在10g中支持。

    Oracle11g从入门到精通

     Oracle数据库系统是数据库领域最优秀的数据库之一,《Oracle11g从入门到精通》以Oracle最新版本Oracle 11g为蓝本,系统地讲述了Oracle数据库的概念、管理和应用开发等内容。  全书结构合理、内容翔实、示例丰富...

    oracle数据库经典题目

    18. 表空间是Oracle数据库中数据的逻辑组织,每个数据库至少有一个SYSTEM系统表空间。 19.视图是一个表示表的数据的数据库对象,它允许用户从一个表或一组表中通过一定的查询语句建立一个“虚表”。 20.序列是一种...

    Oraclet中的触发器

    -- 将修改前数据插入到日志记录表 del_emp ,以供监督使用。 INSERT INTO emp_his(deptno , empno, ename , job ,mgr , sal , comm , hiredate ) VALUES( :old.deptno, :old.empno, :old.ename , :old.job, :old....

    Oracle触发器trigger详解

    数据库触发器是一个与表相关联的,存储的PL/SQL 语句。 每当一个特定的数据操作语句(insert update delete)在指定的表上发出时,Oracle自动执行触发器中定义的语句序列。 举个简单的例子: 当员工表中新增一条记录...

    oracle实验报告

    但不能使用数据定义语句。 在PL/SQL块中使用SELECT语句时注意几点: (1)SELECT语句必须含有INTO子句。 (2)INTO子句后的变量个数和位置及数据类型必须和SELECT命令后的字段名表相同。 (3)INTO子句后可以是简单...

    Oracle11g从入门到精通2

     Oracle数据库系统是数据库领域最优秀的数据库之一,《Oracle11g从入门到精通》以Oracle最新版本Oracle 11g为蓝本,系统地讲述了Oracle数据库的概念、管理和应用开发等内容。  全书结构合理、内容翔实、示例丰富...

    学生成绩管理系统Oracle全部SQL语句.txt

    2、至少建立5个表,以及表间关系,使用到序列,索引,视图,同义词,约束,每个表至少插入相关信息10条记录; 3、要求使用sqlplus,pl/sql或developer建立存储过程,触发器和程序包等代码,其中要求用到游标,异常,...

    实验六-触发器实验报告.doc

    建立触发器 CREATE [OR REPLACE] TRIGGER &lt;触发器名&gt; BEFORE"AFTER INSERT"DELETE"UPDATE OF &lt;列名&gt; ON &lt;表名&gt; [FOR EACH ROW] WHEN (&lt;条件&gt;) 程序块&gt; ON 子句中的名称识别与数据库触发器关联的数据库表 触发器事件...

    Oracle 11g SQL和PL SQL从入门到精通 pdf格式电子书 下载(一)

    读者不仅可以掌握oracle常用工具oracle universal installer、net comfiguration assistant、sql developer、sql*plus的作用及使用方法,而且可以掌握sql语句和pl/sql的各种基础知识和高级特征(记录类型、集合类型...

    Oracle.11g.从入门到精通 (2/2)

    1.1 Oracle数据库产品结构及组成 1.1.1 企业版 1.1.2 标准版 1.1.3 标准版 1.1.4 个人版 1.2 数据库基本术语 1.2.1 数据库 1.2.2 数据库管理系统 1.2.3 数据库系统 1.2.4 数据库模式 1.2.5 数据模型 1.2.6 数据完整...

    Oracle.11g.从入门到精通 (1/2)

    1.1 Oracle数据库产品结构及组成 1.1.1 企业版 1.1.2 标准版 1.1.3 标准版 1.1.4 个人版 1.2 数据库基本术语 1.2.1 数据库 1.2.2 数据库管理系统 1.2.3 数据库系统 1.2.4 数据库模式 1.2.5 数据模型 1.2.6 数据完整...

Global site tag (gtag.js) - Google Analytics