ROWNUM疑似列

問合せによって戻される行ごとに、ROWNUM擬似列によって、行が選択された順序を示す数値が戻されます。最初に選択された行にはROWNUMとして1が、2番目に選択された行にはROWNUMとして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値>正の整数」は、常に偽となるため注意してください。たとえば、次の問合せでは行が戻されません。

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