티스토리 뷰
오라클 쿼리 시 반환되는 레코드 수를 제한하는 방법을 기록해 두고자 글을 작성합니다.
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
;
'지식정보' 카테고리의 다른 글
JWT (Json Web Token) 인증방식 (0) | 2021.01.29 |
---|---|
netstat 사용법 (0) | 2021.01.08 |
[JAVA] 정규식 카드번호 마스킹처리 (0) | 2019.07.16 |
[JAVA] 정규식 주민등록번호 마스킹처리 (0) | 2019.07.16 |
[JAVA] 정규식 이메일 마스킹 처리 (0) | 2019.07.16 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday