[SQLD/P] ROWNUM에 의한 SELECT LIST

Hyo Kyun Lee·2022년 9월 2일
0

SQLD/P

목록 보기
22/82

1. ROWNUM

WHERE ROWNUM <= 5

ROWNUM은 쿼리가 담을 최종적인 SELECT LIST의 수를 제한하는 조건이다. 쿼리상 가장 마지막에 실행되어, 말 그대로 최종적인 데이터리스트를 추출할때 해당 ROWNUM수 만큼만 리스트업하여 보여준다.

즉 ROWNUM 조건절 이전에 100개의 데이터가 쌓여있다고 할때, 해당 데이터는 아래서부터 순차적으로 ROWNUM이 매겨진다. 그 후 ROWNUM <= 5 조건을 맞춰가면서 부합하지 않는 record들은 버려지고 부합하는 record들만 최종 fetch된다.

2. 연속 데이터 조회를 위한 loop

연속 데이터를 조회하는 상황에서 ROWNUM 조건을 추가한다고 하자.

우리가 100개의 데이터를 조회한다고 하자.
이때 fetch할 데이터를 저장할 buffer의 크기를 6이라고 하고, loop를 통해 최대로 출력할 수 있는 데이터의 개수는 5개라고 하자.

우리가 연속적으로 데이터를 조회하기 위해 다음 데이터의 첫번째 인덱스 값을 얻어야 한다고 해보자.

WHERE ROWNUM <= 5

이 경우 딱 buffer 크기에 맞는 5개의 데이터만 select list에 포함하여, loop를 진행할때 다음 데이터를 인식하지 못하고 NOT FOUND ERROR(혹은 예외)를 발생시킬 수 있다.

이러한 조건이 추가된다면 다음 데이터의 첫번째 인덱스 값을 얻지 못하고, 처음의 루프에서 데이터 조회가 중단될 수 있다.

WHERE ROWNUM <= 6

이 경우 select list 자체에는 6개의 데이터가 저장되어, 첫번째 loop에서 NOT FOUND ERROR를 발생하거나 이에 따라 다음 루프 진행을 중단하는 등의 문제를 발생시키지 않는다.

즉 정상적으로 다음 loop를 진행할 수 있고, 또한 ROWNUM에 의해 select list 자체가 마지막으로 존재하는 데이터만큼만 데이터를 추출할 수 있도록 한다. 이에 따라 데이터를 저장하는 buffer 공간낭비(garbage collection) 등의 문제도 보완할 수 있게 된다.

※ OUTPUT 구조체가 마지막 데이터만큼 할당되어 그만큼 공간절약가능.

0개의 댓글