请问我想取出记录集的第30之60条记录,应该怎么写呢?我写成where rownum>30 and rownum<60为什么选不出来纪录呢?

解决方案 »

  1.   

    select rownum,a.* from tab_nam a where rownum<60 MINUS select rownum,a.* from tab_nam a where rownum<30
      

  2.   

    select * from (select t.*,rownum r from your_table) where r>30 and r<60
      

  3.   

    rownum只能从第一个开始取!!
      

  4.   

    select * from 
    (select t.*,rownum num from table) 
    where num>30 and num<60
      

  5.   

    用minus或者先得到行号的列,上面就是。
      

  6.   

    楼主,rownum后面只能写<或者<=
      

  7.   

    rownum between 30 and 60
      

  8.   

    好像用rownum之后,order by的次序就不准了,不知道是什么原因
      

  9.   

    select * from employees where rownum<=60 minus 
    select * from employees where rownum<30;select * from (select employees.*,rownum r from employees) 
    where r between 30 and 60;
      

  10.   

    我刚才试了一下,是可以的哦,所有的记录的话有点多,我是先建立一个过程的视图,然后对视图查找多长时间之前的内容,结果是正确的,你可以试一下,时间有点慢,也可能是我机器的原因,也是可能是里面的文本内容过多导致的。
    CREATE OR REPLACE VIEW V_TEST1 AS SELECT * FROM USER_SOURCE WHERE TYPE='PROCEDURE' AND ROWNUM<10 AND TEXT LIKE '%AAABBB%';
    更改后执行下面的语句,结果为原来的内容:
    select *
    from V_TEST1
    as of timestamp(systimestamp - interval '1' minute);
    查询视图的结果是现在的内容。
    这里你还要查找存储过程里面的关键字,这样便于定位内容!
    你可以按这个方法试一下!
      

  11.   

    如果要将表的数据排序后取一定范围的数据可以这样写:
      select * form 
          (
             select A.*,rownum r
               (
                  select * 
                      from  tabl_name
                        order by column_name desc
                )A
           )
         where r >= 30 and r <= 60;这样写数据量大时速度有影响。