Oracle恢复删除数据、根据sql语句

1、一个表中根据以父子级别关系查询显示出来(如图)

select t.* from department t CONNECT BY PRIOR t.depid=t.supdepid ; --这样也可以,但查出来的结果会有重复
select t.* from department t start with supdepid=0 CONNECT BY PRIOR t.depid=t.supdepid ;--这样就不会了
select t.*  from department t  start with supdepid=0 and t.depname like ‘%部%‘  CONNECT BY PRIOR t.depid=t.supdepid ; --加上其他条件查询

2、显示指定时间的数据库数据

 

如果你在之前误删了数据信息,但又没有备份,你只需加上要查找的条件,

执行下面的语句,就可以找回误删的信息了

 

 

 

--显示一个小时之前的表数据信息

  select * from department as of timestamp sysdate-(1/(24));

--显示90分钟之前的表数据信息

  select *  from department as of timestamp (systimestamp - interval ‘90‘ minute)

 

--锁定表格(锁定后,其他人修改表格就会是排队等待状态)

select * from emoloyee for update;

 

 

 select distinct * from tableName;--查询没有重复的数据

--删除数据库中重复的数据信息

  在oracle中,有个隐藏了自动rowid,里面给每条记录一个唯一的rowid
 下面是查询重复数据的一个例子:
  select a.rowid,a.* from 表名 a
  where a.rowid !=
  (
  select max(b.rowid) from 表名 b
  where a.字段1 = b.字段1 and
  a.字段2 = b.字段2
  )

 

  而外面就是查询出除了rowid最大之外的其他重复的数据了。

  由此,我们要删除重复数据,只保留最新的一条数据,就可以这样写了:
  delete from 表名 a
  where a.rowid !=
  (
  select max(b.rowid) from 表名 b
  where a.字段1 = b.字段1 and
  a.字段2 = b.字段2
  )


    上面语句的执行效率是很低的,可以考虑建立临时表,讲需要判断重复的字段、rowid插入临时表中,然后删除的时候在进行比较。
  create table 临时表 as
  select a.字段1,a.字段2,MAX(a.ROWID) dataid from 正式表 a GROUP BY a.字段1,a.字段2;
  delete from 表名 a
  where a.rowid !=
  (
  select b.dataid from 临时表 b
  where a.字段1 = b.字段1 and
  a.字段2 = b.字段2
  );
  commit;

 

关于删除oracle中重复数据的更多信息: http://tech.sina.com.cn/s/2008-11-13/1057873542.shtml

Oracle恢复删除数据、根据sql语句,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。