본문 바로가기

DataBase/Oracle

TIP - 오라클 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