티스토리 뷰

지식정보

Oracle FETCH

onggun 2020. 5. 11. 10:22

오라클 쿼리 시 반환되는 레코드 수를 제한하는 방법을 기록해 두고자 글을 작성합니다.

Oracle 12버전 이전에는 rownum 으로 레코드 순번을 조회 한 후에 where 조건에서 제한하는 방법을 사용해 왔지만 이 후 부터는 MySql, PostgreSQL 의 LIMIT 와 같이 처리가 가능해 졌다.

예제1.

SELECT *
  FROM "TABLE_NAME"
 WHERE 1=1
 ORDER BY "COL01" ASC NULLS LAST,
          "COL02" DESC NULLS LAST
 FETCH NEXT 10 ROWS ONLY
;

ORACLE FETCH 문법은 다음과 같다.

[ OFFSET offset ROWS ]
FETCH NEXT [ row_count / percent PERCENT ] ROWS [ONLY / WITH TIES ]

OFFSET 은 레코드 제한이 시작되는 지점을 의미하며 생략되는 경우 0이 기본값.
숫자이거나 숫자가 되는 식으로 지정가능.
음수로 지정하는 경우 0으로 초기화됨.
소숫점 이하는 무시됨.
※ OFFSET 값이 NULL 이거나 제한대상 레코드 수보다 큰 경우 조회되는 레코드는 없다.
사용법은 OFFSET 11 ROWS FETCH NEXT 10 ROWS ONLY

다음의 쿼리는 동일한 결과를 가져오며 NEXT 보다 FIRST, ROWS 보다 ROW 가 의미가 명확하다고 하는데 무엇을 사용하던 상관없음.

FETCH NEXT 1 ROWS
FETCH FIRST 1 ROW

ONLY | WITH TIES 

ONLY 는 FETCH NEXT or FETCH FIRST 이후 행에 대해서 지정된 수 또는 백분율에 해당하는 레코드를 명확하게 반환함.

WITH TIES 는 지정된 수 만큼 레코드를 반환하되 마지막 레코드 값과 동일한 레코드가 있는 경우 같이 반환된다.
동일값 여부는 ORDER BY 절에 지정된 값으로 구분하니 해당 구문은 반드시 포함되어야 한다.

기타. PERCENT 구문 예제

SELECT *
  FROM "TABLE_NAME"
 WHERE 1=1
 ORDER BY "COL01" DESC
 FETCH FIRST 5 PERCENT ROWS ONLY
;

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday