修正一下 delete from test where rowid in (select rid from (select rowid rid,cont from test order by rowid) where rownum>=3 and rownum <=6)如果用分析函数时可以把第一次写的改一下: delete from test where rowid in (select rid from (select rowid rid,cont,rownumber() over(partition ... odder by ..) rn from test) where rn>=3 and rn <=6) /
好像是正确的,cont 是什么呢,count吗,请问为什么要用cont
请参考我的BLOG关于取[n,m]行数据的详细解释: http://blog.csdn.net/seafer/archive/2009/07/22/4369224.aspx如果使用rownum来解决你的问题,答案如下(看起来比较复杂): delete from table_name where ROW_ID in ( select RID from (select ROWNUM as ORD, ROW_ID as RID from (select * from table_name order by column_name) t) where ord between 3 and 6 );
delete from (select rownum num,a.* from table a) where num>= 3 and num<= 6
where rowid in (select rid from
(select rowid rid,cont,rownum rn from test order by rowid) where rn>=3 and rn<=6)
/
在oracle中数据的存储是无序的(因为索引等各种条件影响)而rowid也是一个伪列,它也会因为存储等情部会有变化的,所以一般排序最好按表中现有的某列进行排序.rownum:"http://www.cnblogs.com/temptation/archive/2007/05/16/748897.html""每个表中的每一行都有一个与之关联的ROWID或UROWID。从表中获取时,把它们看作为伪列(pseudo column),这说明它们并不真正存储在行中,而是行的一个推导属性。ROWID基于行的物理位置生成;它并不随行存储,对于有ROWID的行(Oracle中最常见的行“类型”;除了IOT中的行之外,所有行都有ROWID),以前ROWID是不可变的。插入一行时,会为之关联一个ROWID(一个地址),而且这个ROWID会一直与该行关联,直到这一行被删除(被物理地从数据库删除)。但是,后来情况发生了变化,因为现在有些操作可能会导致行的ROWID改变,例如:
修正一下
delete from test
where rowid in (select rid from
(select rowid rid,cont from test order by rowid) where rownum>=3 and rownum <=6)如果用分析函数时可以把第一次写的改一下:
delete from test
where rowid in (select rid from
(select rowid rid,cont,rownumber() over(partition ... odder by ..) rn from test) where rn>=3 and rn <=6) /
delete from table_name
where ROW_ID in
(
select RID
from (select ROWNUM as ORD, ROW_ID as RID
from (select *
from table_name
order by column_name) t)
where ord between 3 and 6
);