오라클 8i이상에서 한번의 쿼리로 페이징






페이징 처리를 하려면 전체 Row수와 order by한 부분 중 가져올 부분을 잘라서 가져와야 한다.

그래서 다음의 쿼리를 이용하면 된다. 단 아래의 QueryOracle 8i이상에서만 작동한다.

 





 SELECT * FROM
( SELECT a.*, rownum+rnum-1 as total_rows
   FROM ( SELECT a.*, rownum rnum
            FROM (

 

원하는 ORDER BY 절이 포함된 SELECT 쿼리

 

            ) a
          ORDER BY rnum DESC ) a
  ORDER BY rnum )
WHERE rnum BETWEEN ? AND ?

 

) 10개의 Row만 가져오는 Query





SELECT * FROM
( SELECT a.*, rownum+rnum-1 as total_rows
   FROM ( SELECT a.*, rownum rnum
            FROM (

SELECT column1, column2

   FROM table 

 WHERE column like '%'

ORDER BY column DESC

            ) a
          ORDER BY rnum DESC ) a
  ORDER BY rnum )
WHERE rnum BETWEEN 1 AND 10