ROWNUM 함수는 질의 결과로 생성될 각 레코드에 대한 순서를 나타내는 번호를 반환한다. 첫 번째 결과 레코드는 1, 두 번째 결과 레코드는 2를 가진다.
일반적인 SELECT 문에서는 ROWNUM, INST_NUM()을, GROUP BY 절을 포함한 SELECT 문에서는 GROUPBY_NUM()을 사용할 수 있다. ROWNUM 함수를 사용하면 질의의 결과 레코드 수를 다양한 방법으로 제한할 수 있다. 예를 들어, 질의 결과의 처음 10건만 조회한다거나, 짝수 번째 또는 홀수 번째 레코드만 반환하도록 할 수 있다.
ROWNUM 함수는 결과 타입이 정수형이고, SELECT 절과 WHERE 절과 같이 질의 내에 수식이 위치할 수 있는 모든 곳에 사용할 수 있다. 하지만, ROWNUM 함수 결과를 속성 또는 연관된 부질의(correlated subquery)와 비교하는 것은 허용되지 않는다.
INST_NUM()
ROWNUM
다음은 1988 올림픽에서 금메달 개수를 기준으로 4위권 국가 이름을 반환하는 예제이다. (demodb)
--Limiting 4 rows using ROWNUM in the WHERE condition
SELECT * FROM
(SELECT nation_code FROM participant WHERE host_year = 1988
ORDER BY gold DESC) AS T
WHERE ROWNUM <5;
=== <Result of SELECT Command in Line 4> ===
nation_code
======================
'URS'
'GDR'
'USA'
'KOR'
4 rows selected.
--Limiting 4 rows using FOR ORDERBY_NUM()
SELECT ROWNUM, nation_code FROM participant WHERE host_year = 1988
ORDER BY gold DESC
FOR ORDERBY_NUM() < 5;
=== <Result of SELECT Command in Line 3> ===
rownum nation_code
===================================
156 'URS'
155 'GDR'
154 'USA'
153 'KOR'
4 rows selected.
--Unexpected results : ROWNUM operated before ORDER BY
SELECT ROWNUM, nation_code FROM participant
WHERE host_year = 1988 AND ROWNUM < 5
ORDER BY gold DESC;
=== <Result of SELECT Command in Line 3> ===
rownum nation_code
===================================
1 'ZIM'
2 'ZAM'
3 'ZAI'
4 'YMD'
4 rows selected.