ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • ROWNUM을 이용한 페이지네이션
    Database 2008. 9. 3. 15:16
    반응형
    ROWNUM을 이용한 페이지네이션

    - 결과 셋의 로우 N 에서 로우 M까지를 가져오기 위해 ROWNUM을 사용
    - 일반적인 형식
    SELECT *
    FROM ( SELECT a.*, ROWNUM rnum
           FROM ( your_query_goes_here, with order by ) a
           WHERE ROWNUM <= :MAX_ROW_TO_FETCH )
    WHERE rnum  >= :MIN_ROW_TO_FETCH;

    → :MAX_ROW_TO_FETCH는 결과 셋에서 가져올 마지막 로우로 설정, 결과 셋에서 50 번째 ~ 60 번째 로우만을 가져오려 한다면 이 값은 60이 된다.
    → :MIN_ROW_TO_FETCH는 결과 셋에서 가져올 첫 번째 로우로 설정, 결과 셋에서 50 번째 ~ 60 번째 로우만을 가져오려 한다면 이 값은 50이 된다.

    - 사용 예
    SELECT num, name, subject, pos
    FROM (SELECT a.*, ROWNUM rnum
          FROM (SELECT * FROM board ORDER BY pos, ROWID) a
          WHERE rownum <=20)
    WHERE rnum >= 11;

    → 전체 데이터를 POS 기준으로 정렬하여 그중 11번째 ~ 20번째의 결과값을 리턴


    페이지네이션 쿼리를 사용할 때 주의할 점

    - 유니크하지 않은 컬럼 값을 대상으로 정렬을 수행해야 한다면 ORDER BY 조건에 별도의 조건을 추가
    - ROWID는 테이블 내에서 유니크한 값을 가지므로 기존 ORDER BY 조건과 ORDER BY ROWID 기준을 함께 사용, 사용자가 기대한 순서대로 페이지네이션 쿼리의 결과를 확인할 수 있다.

    http://www.oracle.com/technology/global/kr/oramag/oracle/06-sep/o56asktom.html

    반응형
Designed by Tistory.