クエリの結果の連続した各ローに対して、1 から開始する番号を生成します。NUMBER 関数は主に、select リストで使用するために提供されています。
NUMBER 関数には制限があるため (以下の「備考」で説明します)、代わりにROW_NUMBER 関数 [その他]を使用します。ROW_NUMBER 関数には NUMBER と同じ機能ですが、NUMBER 関数にある制限はありません。
NUMBER( * )
INT
select リストで NUMBER(*) を使用すると、結果セットのローに連番を付けることができます。NUMBER(*) は、各結果ローの ANSI ロー番号の値を返します。つまり、NUMBER 関数は、アプリケーションがどのように結果セットをスクロールするかに応じて、正または負の値を返します。insensitive カーソルの場合は、OPEN 時に結果セット全体が実体化されるため、NUMBER(*) は常に正の値を返します。
また、カーソル・タイプによってはロー番号が変更される場合もあります。insensitive カーソルとスクロール・カーソルの値は固定されています。同時更新を実行すると、動的カーソルと sensitive カーソルの値が変更される場合があります。
DELETE 文、WHERE 句、HAVING 句、ORDER BY 句、サブクエリ、集合を含むクエリ、いずれかの制約、GROUP BY 句、DISTINCT 句、クエリ式 (UNION、EXCEPT、INTERSECT)、派生テーブルで NUMBER 関数を使用すると、構文エラーになります。
NUMBER(*) は、ビューで使用できますが (前述の制限を受ける)、NUMBER(*) を伴う式に対応したビューのカラムは、クエリまたは外部ビューで多くても一度しか参照できません。また、ビューは左外部ジョインまたは全外部ジョインの NULL 入力テーブルとして使用できません。
Embedded SQL で、NUMBER(*) 関数があるクエリを参照するカーソルを使用する場合は、十分に注意してください。特に、データベース・カーソルがカーソルの最後からの相対位置 (負のオフセットによる絶対位置) に配置されている場合、この関数は負の数を返します。
NUMBER は、UPDATE 文の SET 句の代入式の右側で使用できます。たとえば、SET x = NUMBER(*)
。
また、SELECT 文から INSERT を使用すると、NUMBER 関数を使用してプライマリ・キーを生成できます (INSERT 文を参照してください)。ただし、連続したプライマリ・キーの生成には、AUTOINCREMENT 句の使用が好ましい方法です。
AUTOINCREMENT 句の詳細については、CREATE TABLE 文を参照してください。
SQL/2003 ベンダ拡張。
次の文は、連番が付けられた部署リストを返します。
SELECT NUMBER( * ), DepartmentName FROM Departments WHERE DepartmentID > 5 ORDER BY DepartmentName; |
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |