テーブル内のローを一意に識別する符号なし 64 ビット値を返します。
ROWID( correlation-name )
correlation-name クエリで使用されるテーブルの相関名。相関名は、ベース・テーブル、テンポラリ・テーブル、グローバル・テンポラリ・テーブル、またはプロキシ・テーブル (基本となるプロキシ・サーバが同様の機能をサポートしている場合にのみ使用できます) を指す必要があります。ROWID 関数の引数では、ビュー、派生テーブル、共通のテーブル式、またはプロシージャを参照しないでください。
UNSIGNED BIGINT
指定された相関名に対応するテーブル内のローの、ロー識別子を返します。
この関数によって返される値は、複数のクエリ間で一貫しているとはかぎりません。データベースで実行されるさまざまな演算の結果、テーブルのロー識別子が変更される可能性があるためです。特に、REORGANIZE TABLE 文を実行すると、ロー識別子が変更される可能性があります。また、ローが削除された後にロー識別子が再利用される場合もあります。そのため、通常は ROWID 関数の使用を避け、代わりにプライマリ・キー値に基づいてロー識別子を取得してください。ROWID は診断を実行する場合にのみ使用することをおすすめします。
関数の結果は UNSIGNED BIGINT ですが、この値について数学演算を行っても意味がありません。たとえば、ロー識別子に 1 を追加しても、次のローのロー識別子にはなりません。また、ROWID を使用する場合、等号と IN 述部のみを検索引数にすることができます。必要に応じて、ROWID
を使用する述部 (ROWID( T ) = literal
など) は 64 ビット UNSIGNED INTEGER 値へのキャストに使用できます。変換を実行できない場合、データの例外処理が発生します。literal の値が無効なロー識別子の場合、比較述部は FALSE と評価されます。
ROWID 関数をテーブルまたはカラムの検査制約内で使用することはできません。また、計算カラムの COMPUTE 式でも使用できません。
SQL/2003 ベンダ拡張。
次の文は、Employee のローから、105 のロー識別子を返します。
SELECT ROWID( Employees ) FROM Employees WHERE Employees.EmployeeID = 105; |
次の文は、Employees テーブルのローのロック・リストとそのローの内容を返します。
SELECT * FROM sa_locks() S JOIN Employees WITH( NOLOCK ) ON ROWID( Employees ) = S.row_identifier WHERE S.table_name = 'Employees'; |
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |