Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (日本語) » SQL Anywhere サーバ - SQL リファレンス » システム・オブジェクト » システム・プロシージャ » システム・プロシージャのアルファベット順リスト

 

sa_rowgenerator システム・プロシージャ

指定された開始値と終了値の間のローを格納した結果セットを返します。

構文
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 );