2013-09-02 3 views
0

일부 조건 및 특정 순서로 여러 행을 반환하는 프로 시저가 있습니다. 이 행은 몇 페이지 (페이지 당 50 행)로 구분됩니다. 특정 행이있는 페이지에서 모든 행을 검색하는 방법은 무엇입니까? 이 작업을 수행하는 쿼리를 만들었지 만 최적화되지 않았으며 성능에 큰 영향을 미칩니다. 내가 그것을 최적화하거나 대안주고 도와 줘요 ...특정 행을 포함하는 페이지 검색

select * 
from 
(
    select file_id, row_number() over (order by rownum) rn 
    from my_table 
) 
where trunc(rn/50) = (
         select trunc(rn/50) from 
         (select t.*, rownum rn from my_table t) 
         where file_id = 29987); 

답변

0

당신은 그것을 조금 조정해야을

with tab as 
(
     -- the 
     -- row_number() over (order by rownum) rn 
     -- should be here 
     select level + 1000 as val 
     ,  level/50  as rn_50 
     from dual 
     connect by 
       level < 140 
) 
, val as 
(
     select rn_50 
     from tab 
     where val = 1004 -- pg 1 
     --where val = 1051 -- pg 2 
     --where val = 1101 -- pg 3 
) 
select * 
from tab t 
where rn_50 >= (select floor(rn_50) from val) 
and  rn_50 <= (select ceil (rn_50) from val) 
; 
관련 문제