1. 일반적인 오라클 페이징 처리
SELECT *
FROM (
SELECT A.*
, ROWNUM AS RNUM
, FLOOR((ROWNUM-1)/{디스플레이수}+1) AS PAGE
, COUNT(*) OVER() AS TOTCNT
FROM (
{검색쿼리 - 정렬이 필요할 경우 정렬조건 포함}
) A
)
WHERE PAGE = {페이지번호};
OR
SELECT *
FROM (
SELECT A.*
, ROWNUM AS RNUM
, COUNT(*) OVER() AS TOTCNT
FROM (
{검색쿼리 - 정렬이 필요할 경우 정렬조건 포함}
) A
)
WHERE RNUM > {범위부터}
AND RNUM <= {범위까지};
2. 오라클 대용량 페이징 처리
SELECT * FROM (
SELECT ROWNUM AS RNUM, A.* FROM (
{검색쿼리 - 정렬이 필요할 경우 정렬조건 포함}
) A WHERE ROWNUM <= {범위까지}
) WHERE RNUM > {범위부터};
OR
SELECT * FROM (
SELECT /*+ INDEX_ASC or INDEX_DESC(A {정렬조건 인덱스명}) */
ROWNUM AS RNUM, A.* FROM (
{검색쿼리 - 정렬이 필요한 경우 정렬조건을 포함하지 않고 ORACLE 힌트사용}
) A WHERE ROWNUM <= {범위까지}
) WHERE RNUM > {범위부터};
3. 인덱스를 이용한 페이징 처리
SELECT
IDX, TITLE, CONTENT
FROM ( SELECT /*+ INDEX(A IN_BOARDS)*/ ROWNUM AS RUNM, IDX,TITLE,CONTENT FROM BOADR A)
WHERE RNUM >=1 AND RNUM <=10
-> 위 정보에서 RNUM 값만 바꾸면 해당 페이징 쿼리 완성 :
-> RNUM 예시 : (((PAGENO - 1) * PAGESIZE) + 1)
4. ROW_NUMBER()를 이용한 페이징 처리
SELECT * FROM (
SELECT
A_TITLE
,ROW_NUMBER() OVER (ORDER BY A_IDX ASC) ROWNUMBER
FROM BOARD)
WHERE ROWNUMBER BETWEEN 100 AND 120
728x90
'Carpe Programming > oracle' 카테고리의 다른 글
[oracle] job (0) | 2012.02.03 |
---|---|
[eclipse] Indigo - jQuery, JSDT (0) | 2012.01.26 |
[오라클] 파티셔닝 샘플 (0) | 2012.01.25 |
오라클 정규식 (0) | 2012.01.19 |
[oracle] TIMESTAMP 밀리세컨드 시간 계산하기 (0) | 2012.01.19 |