式は、次の目的に使用します。
INSERT...SELECT文の選択リスト
WHERE句およびHAVING句の条件
GROUP BY句およびORDER BY句
TimesTenでは、表に保存される各行にROWIDと呼ばれる一意のIDが割り当てられます。 このROWIDのデータ型はROWIDです。ROWIDは、ROWID擬似列を問い合せることで確認できます。
ROWID擬似列は実際の列ではないため、データベース領域は不要です。また、更新したり、索引を作成したり、削除することはできません。
ROWID値は表に行が存在する間は使用されますが、元の行が削除されると、そのROWIDはシステムによって違う行に割り当てられる場合があります。 0(ゼロ)はROWIDに使用できません。
ROWIDはリカバリ、バックアップおよびリストア処理を行っても使用できます。 ただし、ROWIDはレプリケーション、ttMigrate
またはttBulkCp
の処理を行うと使用できなくなります。
ROWIDの詳細は、「式の指定」を参照してください。 ROWIDデータ型の詳細は、「ROWIDデータ型」を参照してください。
問合せによって戻される行ごとに、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