delete from 表名 where rownum >= 3 and rownum <= 6 
请教各位大侠,这样写对吗,如果不会应该怎么写呢

解决方案 »

  1.   

    这样写不行
    delete from (select rownum num,a.* from table a) where num>= 3 and num<= 6 
      

  2.   

    delete from test
    where rowid in (select rid from
    (select rowid rid,cont,rownum rn from test order by rowid) where rn>=3 and rn<=6)
    /
      

  3.   

    rownum是随着你的查询条件和排序变化的值,它不是你想像中的按照一定的顺序存在的,
    在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改变,例如:
      

  4.   


    修正一下
    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) /
      

  5.   

    好像是正确的,cont 是什么呢,count吗,请问为什么要用cont
      

  6.   

    请参考我的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
    );