問合せによって戻される行ごとに、ROWNUM擬似列によって、行が選択された順序を示す数値が戻されます。最初に選択された行にはROWNUMとして1が、2番目に選択された行には2が割り当てられ、以降も同様の割当てが行われます。
次の例に示すようにROWNUMを使用して、問合せによって戻される行数を制限します。
SELECT * FROM employees WHERE ROWNUM < 10;
行が選択された順序は、使用している索引または結合順序(あるいはその両方)によって異なります。ORDER BY句を指定すると、ソートが行われる前にROWNUMが割り当てられます。ただし、ORDER BY句を指定すると、索引または結合順序(あるいはその両方)が変更される可能性があります。選択された行の順序が変更されると、選択された各行に関連付けられているROWNUM値も変更される可能性があります。
たとえば、別の索引が使用された場合、次の問合せは、以前に実行した問合せとは異なる従業員を戻す可能性があります。
SELECT * FROM employees WHERE ROWNUM < 10 ORDER BY last_name;
正の整数より大きいROWNUM値に対する条件テストは常にFALSEになります。たとえば、次の問合せでは行が戻されません。
SELECT * FROM employees WHERE ROWNUM > 1;
ROWNUMを使用して一意の値を表の各行に割り当てます。次にその例を示します。
UPDATE my_table SET column1 = ROWNUM;
問合せにFIRST NumRowsまたはROWS M TO Nが含まれている場合は、ROWNUMを使用して戻される行の数を制限しないでください。たとえば、次の問合せでは、エラー・メッセージが戻されます。
SELECT FIRST 2 * FROM employees WHERE ROWNUM <1 ORDER BY employee_id;
2974: Using rownum to restrict number of rows returned cannot be combined with first N or rows M to N