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

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

38aaf1e68f9feb560101a3586bf2d580.png

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、显示指定时间的数据库数据

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

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

b5bc56f912e672bceb2ac832fb672f57.png

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

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

原文:http://www.cnblogs.com/laotan/p/3630191.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值