DEV/database

ORACLE 페이징 처리

석봉 2023. 11. 14. 16:55

조회 데이터가 너무 많은 경우 데이터를 모두 불러오면 출력에 문제가 있을 수 있다.

(느리다던가... 부하가 너무 많이 걸린다던가...)

 

그런 경우 페이징을 사용하여 처리하는 것이 좋다.

 
-- 데이터를 한번 감싸고 일부를 가져온다고 생각하자.
-- ROW_NUMBER() : 순번 매기기
-- [기준점 컬럼] : 페이징을 하기 때문에 기준점이 명확해야함. 중복값이 있으면 항상 일정한 값이 나올 수 있도록 잘 정렬해줄 것.
-- [페이지 건수] : 한 페이지 몇 건을 표출할 것인지 설정
-- [조회할 페이지] : 조회할 페이지 번호

SELECT
        A.*
FROM
        (
                SELECT
                        COUNT(*) OVER() AS TOTAL_CNT  -- 총 카운트
                        , FLOOR( ( ROW_NUMBER() OVER(ORDER BY [기준점 컬럼]) - 1 ) / [페이지 건수] + 1 ) AS RNUM
                        , SAMPLE_NM
                        , SMAPLE_CD
                        , SMAPLE_DT
                FROM
                        [SAMPLE_TABLE]
                WHERE
                        [조건절]
                ORDER BY [기준점 컬럼]
        ) A
WHERE
        RNUM = [조회할 페이지]