ALTER SEQUENCE ステートメント
ALTER SEQUENCE ステートメントを使用すると、シーケンスを変更できます。
以下の点で、シーケンスを変更できます。
- シーケンスを再始動
- 将来のシーケンス値の間の増分を変更する
- 最小値または最大値を設定または除去する
- キャッシュ済みシーケンス番号の数を変更
- シーケンスが循環するかどうかを決定する属性を変更する
- 要求の順序でシーケンス番号が生成されるかどうかを変更
呼び出し
このステートメントは、アプリケーション・プログラムに組み込んだり、動的 SQL ステートメントを使用して発行したりすることができます。 これは、DYNAMICRULES の実行動作がパッケージに効力を持つ場合にのみ、動的に準備できる実行可能ステートメントです (SQLSTATE 42509)。
許可
ステートメントの許可 ID によって保持されている特権には、少なくとも以下のいずれかの権限が含まれていなければなりません。
- 変更するシーケンスに対する ALTER 特権
- 暗黙的または明示的に指定されているスキーマに対する ALTERIN 特権
- 暗黙的または明示的に指定されているスキーマに対する SCHEMAADM 権限
- DBADM 権限
構文
説明
- シーケンス名
- 変更するシーケンスを識別します。 この名前 (暗黙的または明示的スキーマ修飾子を含む) は、 現行のサーバーに存在するシーケンスを固有に識別しなければなりません。 この名前が示すシーケンスが、明示的または暗黙的に指定されたスキーマに存在しない場合、 エラー (SQLSTATE 42704) が戻されます。 sequence-name には、 システムが ID 列に対して生成したシーケンスを指定することはできません (SQLSTATE 428FB)。
- RESTART
- シーケンスを再始動します。 numeric-constant が指定されていない場合、シーケンスは、
そのシーケンスを作成した CREATE SEQUENCE ステートメントに開始値として暗黙的または
明示的に指定されている値で再始動されます。
- WITH 数値定数
- 指定した値でシーケンスを再始動します。 この値は、小数点の右側に非ゼロの数字がない (SQLSTATE 428FA) かぎり、シーケンスに関連する データ・タイプの列に割り当てられる正または負の値にすることができます (SQLSTATE 42815)。
- INCREMENT BY 数値定数
- 連続したシーケンス値のインターバルを指定します。 この値は、シーケンスに関連する
データ・タイプの列に割り当てられる正または負の値にすることができます (SQLSTATE 42815)。 この値は、長精度整数定数の値を超えてはならず (SQLSTATE 42820)、
また小数点の右側にゼロ以外の数字があってはなりません (SQLSTATE 428FA)。
この値が負の場合、これは降順シーケンスです。 この値が 0 の場合、または正の場合は、 ALTER ステートメント以降は昇順になります。
- MINVALUE または NO MINVALUE
- 降順シーケンスが値の生成を循環または停止する最小値、あるいは最大値に達した後、
昇順シーケンスが循環する最小値を指定します。
- MINVALUE 数値定数
- 最小値にする数値定数を指定します。 この値は、小数点の右側に非ゼロの数字がない (SQLSTATE 428FA) かぎり、シーケンスに関連する データ・タイプの列に割り当てられる正または負の値にすることができます (SQLSTATE 42815) が、 最大値以下でなければなりません (SQLSTATE 42815)。
- NO MINVALUE
- 昇順シーケンスの場合、値は元の開始値です。 降順シーケンスの場合、シーケンスに関連するデータ・タイプの最小値です。
- MAXVALUE または NO MAXVALUE
- 昇順シーケンスが値の生成を循環または停止する最大値、あるいは最小値に達した後、
降順シーケンスが循環する最大値を指定します。
- MAXVALUE 数値定数
- 最大値にする数値定数を指定します。 この値は、小数点の右側に非ゼロの数字がない (SQLSTATE 428FA) かぎり、 シーケンスに関連するデータ・タイプの列に割り当てられる正または負の値にすることができます (SQLSTATE 42815) が、 最小値以上でなければなりません (SQLSTATE 42815)。
- NO MAXVALUE
- 昇順シーケンスの場合、値はシーケンスに関連するデータ・タイプの最大値です。 降順シーケンスの場合、値は最初の開始値です。
- CYCLE または NO CYCLE
- その最大値または最小値に達した後、シーケンスが値の生成を続行するかどうかを指定します。 シーケンスが境界に達するのは、次の値が境界条件を正確に満たしたとき、またはその値を超えたときです。
- CYCLE
- 最大値または最小値に達した後、このシーケンスについて値の生成を続行することを指定します。 このオプションが使用されると、昇順シーケンスが最大値に達した後、その最小値が生成されます。
降順シーケンスが最小値に達した後、その最大値が生成されます。 シーケンスの最大値および最小値は、循環に使用される範囲を決定します。
CYCLE が有効な場合、重複するシーケンス値が生成される場合があります。
- NO CYCLE
- シーケンスの最大値または最小値に達した後、そのシーケンスについて値は生成されないことを指定します。
- CACHE または NO CACHE
- 高速アクセスのため、事前割り振り値のいくつかをメモリーに保管するかどうかを指定します。 これはパフォーマンスおよびチューニング・オプションです。
- CACHE 整数定数
- 事前割り振りされ、メモリーに保管されるシーケンス値の最大数を指定します。 値を事前割り振りしてキャッシュに保管しておくと、シーケンス値を生成するとき、
ログへの同期入出力が少なくなります。システム障害が発生した場合、コミットされたステートメントで使用されていないすべてのキャッシュ・シーケンス値は失われます (つまり、使用されることはありません)。失われる可能性のあるシーケンス値の最大数は、以下のように計算されます。
- ORDER を指定すると、最大数は CACHE オプションに指定された値になります。
- 複数パーティション または Db2® pureScale® 環境では、CACHE オプションに指定された値に新しい ID 値を生成するメンバーの数を乗算した値が最大値になります。
最小値は 2 です (SQLSTATE 42815)。
- NO CACHE
- シーケンスの値が事前割り振りされないよう指定します。 システム障害、シャットダウン、またはデータベース非活動化の際、 値が失われることはありません。 このオプションが指定されると、シーケンスの値はキャッシュに保管されません。 この場合、シーケンスの新しい値が要求されるたびに、ログに対して同期入出力が行われます。
- ORDER または NO ORDER
- 要求の順序でシーケンス番号が生成されるかどうかを指定します。
- ORDER
- 要求の順序でシーケンス番号が生成されるよう指定します。
- NO ORDER
- 要求の順序でシーケンス番号を生成する必要がないことを指定します。
注
- 今後のシーケンス番号だけが ALTER SEQUENCE ステートメントによって影響を受けます。
- シーケンスのデータ・タイプは変更できません。 代わりに、新しいシーケンスに目的のデータ・タイプを指定して、 シーケンスをドロップおよび再作成してください。
- シーケンスが変更されると、キャッシュされている値はすべて失われます。
- シーケンスを再始動、または CYCLE に変更した後、以前にシーケンスによって生成された 値と重複するシーケンス番号が生成される可能性があります。
- 代替構文: Db2 の以前のバージョンおよび他のデータベース製品との互換性のために、以下の代替の構文がサポートされています。 これらの代替は非標準であり、使用すべきではありません。
- コンマは、複数のシーケンス・オプションを分離するのに使用できます。
- NO MINVALUE、NO MAXVALUE、NO CYCLE、NO CACHE、 および NO ORDER の代わりにそれぞれ、NOMINVALUE、NOMAXVALUE、NOCYCLE、NOCACHE および NOORDER を指定できます。
例
数値なしで RESTART を指定する理由として考えられるのは、
シーケンスを START WITH 値にリセットすることです。 この例では、1 から表の行数までの数値を生成し、一時表を使用して表に追加した列に
その数値を挿入しています。 以降使用する時には、すべての結果行に番号が付けられて結果が返されます。
ALTER SEQUENCE ORG_SEQ RESTART
SELECT NEXT VALUE FOR ORG_SEQ, ORG.* FROM ORG