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)