-
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반응형