ROWNUM は、列がクエリから取得された順序に基づいて、インクリメントする一意の整数値が各行に割り当てられる疑似列です。 したがって、取得される最初の行の ROWNUM は 1 です。 2 番目の行の ROWNUMは 2 です。 他の行でも同様のルールとなります。
この機能を使用して、クエリによって取得される行数を制限できます。 次の例は、この機能がどのように動作するかを示します。
SELECT empno, ename, job FROM emp WHERE ROWNUM < 5;
empno | ename | job
-------+-------+----------
7369 | SMITH | CLERK
7499 | ALLEN | SALESMAN
7521 | WARD | SALESMAN
7566 | JONES | MANAGER
(4 rows)
ROWNUM 値は、結果セットがソートされる前に各行に割り当てられます。 結果セットは ORDER BY 句で指定された順序で返されますが、ROWNUM 値は昇順でソートされない場合があります。 結果セットと ROWNUM 値は、以下の例のように返されます。
SELECT ROWNUM, empno, ename, job FROM emp WHERE ROWNUM < 5 ORDER BY ename;
rownum | empno | ename | job
--------+-------+-------+----------
2 | 7499 | ALLEN | SALESMAN
4 | 7566 | JONES | MANAGER
1 | 7369 | SMITH | CLERK
3 | 7521 | WARD | SALESMAN
(4 rows)
次の例では、jobhist テーブルの各行にシーケンス番号を追加する方法を示しています。 seqno という名前の新しい列がテーブルに追加され、UPDATE 文で seqno 列が ROWNUM に設定されます。
ALTER TABLE jobhist ADD seqno NUMBER(3);
UPDATE jobhist SET seqno = ROWNUM;
以下の SELECT 文で、seqno 列の新しい値を表示します。
SELECT seqno, empno, TO_CHAR(startdate,'DD-MON-YY') AS start, job FROM jobhist;
seqno | empno | start | job
-------+-------+-----------+-----------
1 | 7369 | 17-DEC-80 | CLERK
2 | 7499 | 20-FEB-81 | SALESMAN
3 | 7521 | 22-FEB-81 | SALESMAN
4 | 7566 | 02-APR-81 | MANAGER
5 | 7654 | 28-SEP-81 | SALESMAN
6 | 7698 | 01-MAY-81 | MANAGER
7 | 7782 | 09-JUN-81 | MANAGER
8 | 7788 | 19-APR-87 | CLERK
9 | 7788 | 13-APR-88 | CLERK
10 | 7788 | 05-MAY-90 | ANALYST
11 | 7839 | 17-NOV-81 | PRESIDENT
12 | 7844 | 08-SEP-81 | SALESMAN
13 | 7876 | 23-MAY-87 | CLERK
14 | 7900 | 03-DEC-81 | CLERK
15 | 7900 | 15-JAN-83 | CLERK
16 | 7902 | 03-DEC-81 | ANALYST
17 | 7934 | 23-JAN-82 | CLERK
(17 rows)