Oracle / SQL - 选择指定范围的顺序记录

时间:2011-02-01 04:05:59

标签: sql oracle range subset

我正在尝试从连接中选择5000到10000的记录子集。我这样的查询在过去有效,但它们稍微复杂一些。这是我试图使用的查询,如果我删除rownum / rnum引用(因此外部选择)我按预期收到所有记录,所以我知道逻辑是好的。

SELECT      * 
    FROM    ( 
            SELECT  unique cl.riid_, 
                    rownum as rnum 
            FROM    <table 1> cl, <table 3> mil 
            WHERE   cl.opt = 0 AND 
                    (cl.st_ != 'QT' OR cl.st_ IS NULL) AND 
                    cl.hh = 0 AND 
                    cl._ID_ = mil._ID_ AND 
                    mil.TYPE in (0, 1, 2, 3, 4) AND 
                    EXISTS 
                        ( SELECT    'x' 
                            FROM    <table 2> sub 
                            WHERE   cl.ea_ = lower(sub.ea_) AND 
                                    sub.status = 0 AND 
                                    lower(sub.subscription) = 'partner' 
                        ) AND 
                    rownum <= 10000 
            ) 
    where   rnum > 5000

所以当我运行这个查询时,我从我们的系统收到这条消息(这不是一个Oracle cli接口,而是一个存在于它顶部的web层,所以如果它与众不同,请带有错误消息。 )

'错误:选择查看的资源无效。在查看数据之前,您可能需要重新创建或修复对象。'

资源将是查询的结果。

那么有没有人知道最新情况或更好的方法呢?

谢谢!

1 个答案:

答案 0 :(得分:2)

我相信你在Oracle中寻找类似的东西:

select * 
  from ( select a.*, rownum rnum
           from ( YOUR_QUERY_GOES_HERE -- including the order by ) a
          where rownum <= MAX_ROWS )
 where rnum >= MIN_ROWS
/

Ask Tom的好讨论是here