2011년 6월 1일 수요일

오라클 8i이상에서 한번의 쿼리로 페이징 처리하는 방법

페이징 처리를 하려면 전체 Row수와 order by한 부분 중 가져올 부분을 잘라서 가져와야 한다.
그래서 다음의 쿼리를 이용하면 된다. 단 아래의 Query는 Oracle 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

댓글 없음:

댓글 쓰기

블록체인 개요 및 오픈소스 동향

블록체인(block chain) 블록체인은 공공 거래장부이며 가상 화폐로 거래할때 발생할때 발생할 수 있는 해킹을 막는 기술. 분산 데이터베이스의 한 형태로, 지속적으로 성장하는 데이터 기록 리스트로서 분산 노드의 운영자에 의한 임의 조작이 불가...