指定された開始値と終了値の間のローを格納した結果セットを返します。
sa_rowgenerator( [ rstart [, rend [, rstep ] ] ] )
rstart 開始値を指定する任意の INTEGER パラメータ。デフォルト値は 0 です。
rend 終了値を指定する任意の INTEGER パラメータ。デフォルト値は 100 です。
rstep シーケンス値の増分を指定する任意の INTEGER パラメータ。デフォルト値は 1 です。
カラム名 | データ型 | 説明 |
---|---|---|
row_num | INTEGER | シーケンス番号。 |
sa_rowgenerator プロシージャをクエリの FROM 句で使用して、番号のシーケンスを生成できます。RowGenerator システム・テーブルを使用する代わりに、このプロシージャを使用できます。次ようなタスクには、sa_rowgenerator を使用できます。
結果セット内の既知の数のローについてテスト・データを生成する。
あらゆる範囲の値に対するローを格納した結果セットを生成する。たとえば、1 か月の毎日についてのローを生成したり、郵便番号の範囲を生成したりできます。
結果セット内に指定した数のローを格納するクエリを生成する。これは、クエリのパフォーマンスのテストに役立ちます。
次の文を使用して、RowGenerator テーブルの動作をエミュレートできます。
SELECT row_num FROM sa_rowgenerator( 1, 255 ); |
なし
なし
次のクエリは、現在の日付ごとに 1 つのローを含む結果セットを返します。
SELECT DATEADD( day, row_num-1, YMD( DATEPART( year, CURRENT DATE ), DATEPART( month, CURRENT DATE ), 1 ) ) AS day_of_month FROM sa_rowgenerator( 1, 31, 1 ) WHERE DATEPART( month, day_of_month ) = DATEPART( month, CURRENT DATE ) ORDER BY row_num; |
次のクエリは、郵便番号が (0-9999)、(10000-19999)、...、(90000-99999) の範囲の地域に居住している従業員数を示します。該当する従業員がいない範囲もあり、その場合は警告「集合関数では、NULL 値は無視されます (-109)
」が生成されます。sa_rowgenerator プロシージャを使用すると、ある範囲の郵便番号に従業員がいない場合でも、これらの範囲を生成できます。
SELECT row_num AS r1, row_num+9999 AS r2, COUNT( PostalCode ) AS zips_in_range FROM sa_rowgenerator( 0, 99999, 10000 ) D LEFT JOIN Employees ON PostalCode BETWEEN r1 AND r2 GROUP BY r1, r2 ORDER BY 1; |
次の例は、データのローを 10 個生成し、それらを NewEmployees テーブルに挿入します。
INSERT INTO NewEmployees ( ID, Salary, Name ) SELECT row_num, CAST( RAND() * 1000 AS INTEGER ), 'Mary' FROM sa_rowgenerator( 1, 10 ); |
次の例は、sa_rowgenerator システム・プロシージャを使用して、すべての整数を含むビューを作成します。この例の値 2147483647 は、SQL Anywhere でサポートされている最大の符号付き整数を表します。
CREATE VIEW Integers AS SELECT row_num AS n FROM sa_rowgenerator( 0, 2147483647, 1 ); |
次の例は、sa_rowgenerator システム・プロシージャを使用して、0001-01-01 ~ 9999-12-31 の日付を含むビューを作成します。この例の値 3652058 は、0001-01-01 ~ 9999-12-31 (それぞれ SQL Anywhere でサポートされている最初の日付と最後の日付) の日数を表します。
CREATE VIEW Dates AS SELECT DATEADD( day, row_num, '0001-01-01' ) AS d FROM sa_rowgenerator( 0, 3652058, 1 ); |
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |