Oracle 查表数据的插入更新时间

在日常工作中,有一些表没有创建时间的字段,但经常会遇到想看看表中记录的插入或更新的时间,或是想知道什么时间插入或添加了那些记录这种需求。

--创建用于测试的表
create table test_zz
(
  id   number,
  name varchar2(10),
  gender varchar2(5)
);

--插入一部分数据(插入的时间是 2012-11-28 11:18)
insert into test_zz values (1, '刘德华', '');
insert into test_zz values (2, '张学友', '');
insert into test_zz values (3, '黎明', '');
insert into test_zz values (4, '郭富城', '');
insert into test_zz values (5, '吴秀波', '');
insert into test_zz values (6, '谢君豪', '');
commit;

-- 查2012-11-28 11:19之前更新test_zz这张表的记录,发现是6条记录
select * from test_zz as of timestamp to_date('2012-11-28 11:19','yyyy-mm-dd hh24:mi');


-- 再插入一条记录(插入的时间是 2012-11-28 11:20)
insert into test_zz values (7, '德尼罗', '');
commit;

-- 再查2012-11-28 11:19之前更新test_zz这张表的记录,发现还是6条,新插入的那条记录没有找到
select * from test_zz as of timestamp to_date('2012-11-28 11:19','yyyy-mm-dd hh24:mi');



-- 利用下面的SQL就可以查处最近更改的数据。
SELECT ID,
       NAME,
       TO_CHAR(VERSIONS_STARTTIME, 'YYYY-MM-DD HH24:MI:SS'),  -- 最开始插入的时间
       TO_CHAR(VERSIONS_ENDTIME,'YYYY-MM-DD HH24:MI:SS'),     -- 最后被更新的时间
       VERSIONS_OPERATION                                     -- I :insert  U : update  D : delete
  FROM test_zz VERSIONS BETWEEN TIMESTAMP MINVALUE AND MAXVALUE
 WHERE VERSIONS_STARTTIME IS NOT NULL
 ORDER BY VERSIONS_STARTTIME DESC;
 
--修改几条数据和接下来的查询做对比。
UPDATE test_zz SET GENDER='' WHERE NAME='吴秀波';
UPDATE test_zz SET GENDER='' WHERE NAME='谢君豪';
commit;

--再次查询,被修改的数据就可以看到被修改和修改前的数据。
SELECT ID,
       NAME,
       GENDER,
       TO_CHAR(VERSIONS_STARTTIME, 'YYYY-MM-DD HH24:MI:SS'),
       TO_CHAR(VERSIONS_ENDTIME,'YYYY-MM-DD HH24:MI:SS'),
       VERSIONS_OPERATION 
  FROM test_zz VERSIONS BETWEEN TIMESTAMP MINVALUE AND MAXVALUE
 WHERE VERSIONS_STARTTIME IS NOT NULL
 ORDER BY VERSIONS_STARTTIME DESC;


--再删除几条数据后后查询
delete from test_zz WHERE NAME='吴秀波';
delete from test_zz WHERE NAME='谢君豪';
commit;

SELECT ID,
       NAME,
       GENDER,
       TO_CHAR(VERSIONS_STARTTIME, 'YYYY-MM-DD HH24:MI:SS'),
       TO_CHAR(VERSIONS_ENDTIME,'YYYY-MM-DD HH24:MI:SS'),
       VERSIONS_OPERATION
  FROM test_zz VERSIONS BETWEEN TIMESTAMP MINVALUE AND MAXVALUE
 WHERE VERSIONS_STARTTIME IS NOT NULL
 ORDER BY VERSIONS_STARTTIME DESC;

 

 

 

posted @ 2012-11-28 11:26  cczz_11  阅读(5997)  评论(0)    收藏  举报