ROWNUM是一個偽列,它根據從查詢中檢索行的順序為每行分配一個遞增式的唯一整數值。因此,檢索到的第一行的ROWNUM為1,第二行的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 值不一定按升序順序返回,如以下樣本所示:
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)