ALTER SEQUENCE
ALTER SEQUENCE ステートメントを使用して、シーケンスを変更できます。
ALTER SEQUENCE ステートメントを使用して、シーケンスを以下のように変更できます。
- シーケンスを再始動する
- 将来のシーケンス値の間の増分を変更する
- 最小値または最大値を設定または除去する
- キャッシュ済みシーケンス番号の数を変更する
- シーケンスが循環するかどうかを決定する属性を変更する
- 要求の順序でシーケンス番号が生成されるかどうかを変更する
呼び出し
このステートメントは、アプリケーション・プログラムに組み込むことができ、また対話式に呼び出すこともできます。 これは、動的に準備できる実行可能ステートメントです。
権限
このステートメントの権限 ID が保持する特権には、少なくとも以下の 1 つ が含まれていなければなりません。
- ステートメント内で識別されるシーケンスに対しては次のもの。
- そのシーケンスが入っているライブラリーに対する *EXECUTE システム権限
- シーケンスについての ALTER 権限
- データベース管理者権限
このステートメントの権限 ID が保持する特権には、少なくとも以下の 1 つ が含まれていなければなりません。
- 次のシステム権限
- Change Data Area (CHGDTAARA) コマンドに対する *USE
- Retrieve Data Area (RTVDTAARA) コマンドに対する *USE
- 管理権限
このステートメントの権限 ID が保持する特権には、少なくとも以下の 1 つ が含まれていなければなりません。
- SYSSEQOBJECTS カタログ表の場合
- その表に対する UPDATE 特権、および
- QSYS2 ライブラリーに対する *EXECUTE システム権限
- 管理権限
特殊タイプを参照する場合は、ステートメントの権限 ID によって保持される 特権に、少なくとも次のいずれか 1 つが含まれなければなりません。
- ステートメント内で識別される特殊タイプに対しては次のもの。
- その特殊タイプに対する USAGE 特権、および
- その特殊タイプを含むライブラリーに対する *EXECUTE システム権限
- 管理権限
SQL 特権に対応するシステム権限については、『シーケンスへの権限を検査する際の対応するシステム権限』、『表またはビューへの権限を検査する際の対応するシステム権限』、および『特殊タイプへの権限を検査する際の対応するシステム権限』を参照してください。
構文
>>-ALTER SEQUENCE--sequence-name--------------------------------> .---------------------------------------------. V (1) | >----+-DATA TYPE--data-type----------------+-----+------------->< +-RESTART--+------------------------+-+ | '-WITH--numeric-constant-' | +-INCREMENT BY--numeric-constant------+ +-+-NO MINVALUE----------------+------+ | '-MINVALUE--numeric-constant-' | +-+-NO MAXVALUE----------------+------+ | '-MAXVALUE--numeric-constant-' | +-+-NO CYCLE-+------------------------+ | '-CYCLE----' | +-+-NO CACHE----------------+---------+ | '-CACHE--integer-constant-' | '-+-NO ORDER-+------------------------' '-ORDER----'
- 同じ文節を複数回指定することはできません。
data-type |--+-built-in-type------+---------------------------------------| '-distinct-type-name-' built-in-type |--+-+---SMALLINT---+---------------------------+---------------| | +-+-INTEGER-+--+ | | | '-INT-----' | | | '---BIGINT-----' | | .-(5,0)-----------------. | '-+-+-DECIMAL-+-+--+-----------------------+-' | '-DEC-----' | | .-,0-. | '-+-NUMERIC-+-' '-(--integer--+----+--)-' '-NUM-----'
説明
- sequence-name
- 変更されるシーケンスを識別します。 この名前は、現行サーバーに既に存在するシーケンスを示すものでなければなりません。
- DATA TYPE data-type
- シーケンス値に使用する新規のデータ・タイプを指定します。
データ・タイプは、厳密に位取りがゼロの数値タイプ (SMALLINT、INTEGER、BIGINT、
DECIMAL、または NUMERIC)、またはソース・タイプが厳密に位取りがゼロの
数値タイプであるユーザー定義の特殊タイプにすることができます。
ALTER SEQUENCE ステートメントによって変更されない既存の START WITH、INCREMENT BY、MINVALUE、および MAXVALUE 属性のそれぞれに、 新規データ・タイプに関連したデータ・タイプの列に割り当て可能な値が含まれている必要があります。
- built-in-type
- シーケンスの内部表示のベースとして使用される新規の組み込みデータ・タイプを指定します。
データ・タイプが DECIMAL または NUMERIC である場合、精度は 63 以下、位取りは 0 でなければなりません。
各組み込みデータ・タイプについての詳細は、CREATE TABLEを参照してください。
プラットフォーム間でのアプリケーションの移植性を保つには、NUMERIC データ・タイプの代わりに DECIMAL を使用します。
- distinct-type-name
- シーケンスの新規データ・タイプが、特殊タイプ (ユーザー定義のデータ・タイプ) であることを指定します。ソース・タイプが DECIMAL または NUMERIC である場合、 シーケンスの精度は該当する特殊タイプのソース・タイプの精度になります。 ソース・タイプの精度は 63 以下、また位取りは 0 でなければなりません。 スキーマ名なしの特殊タイプを指定すると、その特殊タイプ名は、SQL パス上のスキーマを検索することで解決されます。
- RESTART
- シーケンスを再開始します。
数値定数 を指定していない場合は、このシーケンスを最初に作成した CREATE SEQUENCE ステートメントとに暗黙的または明示的に指定されている開始値から、シーケンスが再開始されます。
- WITH numeric-constant
- 指定した値でシーケンスを再始動します。 小数点の右側にゼロ以外の数字がないことを条件として、シーケンスに関連したデータ・タイプの列に割り当てることのできる任意の正または負の値を指定できます。
- INCREMENT BYnumeric-constant
- シーケンスの連続した値の間隔を指定します。
小数点の右側にゼロ以外の数字がないことと、長精度整数定数の値を超えないことを条件として、シーケンスに関連したデータ・タイプの列に割り当てることのできる任意の正または負の値を指定できます。
この値が負の場合は、降順になります。この値が 0 または正の場合は、ALTER ステートメントの後が昇順になります。
- NO MINVALUE または MINVALUE
- 降順シーケンスが値の生成を循環または停止する最小値、あるいは最大値に達した後、
昇順シーケンスが循環する最小値を指定します。
- NO MINVALUE
- 昇順シーケンスの場合、値はオリジナルの開始値です。 降順シーケンスの場合、シーケンスに関連するデータ・タイプ (および精度 (DECIMAL または NUMERIC の場合)) の最小値です。
- MINVALUEnumeric-constant
- このシーケンス用として生成される最小値を示す数値定数を指定します。 小数点の右側にゼロ以外の数字がないことを条件として、 シーケンスに関連したデータ・タイプの列に割り当てることのできる任意の正または負の値を指定できます。 値は、最大値またはそれより小さい値でなければなりません。
- NO MAXVALUE または MAXVALUE
- 昇順シーケンスが値の生成を循環または停止する最大値、あるいは最小値に達した後、
降順シーケンスが循環する最大値を指定します。
- NO MAXVALUE
- 昇順シーケンスの場合、シーケンスに関連するデータ・タイプ (および精度 (DECIMAL または NUMERIC の場合)) の最大値です。 降順シーケンスの場合、値はオリジナルの開始値です。
- MAXVALUE numeric-constant
- このシーケンス用として生成される最大値を示す数値定数を指定します。 小数点の右側にゼロ以外の数字がないことを条件として、 シーケンスに関連したデータ・タイプの列に割り当てることのできる任意の正または負の値を指定できます。 値は、最小値またはそれより大きい値でなければなりません。
- CYCLE または NO CYCLE
- シーケンスの最大値または最小値に達した後も、このシーケンスについて
値を生成し続けるかどうかを指定します。
- NO CYCLE
- シーケンスの最大値または最小値に達した後は、このシーケンスについて 値を生成しないことを指定します。
- CYCLE
- 最大値または最小値に達した後も、このシーケンスの値を生成し続けることを指定します。
このオプションを使用した場合は、昇順シーケンスがシーケンスの最大値に
達した後では、最小値が生成されます。
降順シーケンスがシーケンスの最小値に達した後は、最大値が生成されます。
シーケンスの最大値と最小値によって、循環に使用される範囲が決まります。
CYCLE が有効な場合、データベース・マネージャーによって 1 つのシーケンスに対して重複する値が生成される可能性があります。
- CACHE または NO CACHE
- 事前割り振りの値をメモリー内に保持するかどうかを指定します。
値を事前に割り振ってキャッシュに保管しておくと、NEXT VALUE シーケンス式のパフォーマンスが向上します。
- CACHE integer-constant
- 事前割り振りされてメモリーに保持されるシーケンス値の最大数を指定します。
値を事前割り振りしてキャッシュに保管することにより、シーケンスの値が生成されるときの同期入出力が減少します。
システム障害のような特定の状態になると、キャッシュに保管されていてコミット済みステートメントでまだ使用されていないシーケンス値はすべて失われるため、その後使用されることはありません。 CACHE オプションに指定する値は、こうした状態で失われる可能性のあるシーケンス値の最大数です。
最小値は 2 です。
- NO CACHE
- シーケンスの値を事前割り振りしないことを指定します。これによって、システム障害のような状態になっても値が失われることはなくなります。 このオプションを指定すると、シーケンスの値はキャッシュに保管されません。 この場合は、シーケンスの新しい値が要求されるたびに同期入出力が発生します。
- NO ORDER または ORDER
- シーケンス番号を要求の順序どおりに生成する必要があるかどうかを指定します。
- NO ORDER
- シーケンス番号を要求の順序どおりに生成する必要がないことを指定します。
- ORDER
- シーケンス番号を要求の順序どおりに生成するように指定します。ORDER を指定すると、 NO ORDER を指定した場合よりも NEXT VALUE シーケンス式のパフォーマンスが低下します。
注
シーケンスの変更:
- 今後のシーケンス番号だけが ALTER SEQUENCE ステートメントによって影響を受けます。
- シーケンスが変更されると、キャッシュ済みの値はすべて失われます。
- シーケンスを再始動した後、または CYCLE に変更した後、 生成される値が以前にそのシーケンスに対して生成された値と重複する可能性があります。
代替構文: 以下のキーワードは、他の DB2® 製品の旧リリースとの互換性を維持するためにサポートされている同義語です。これらのキーワードは標準キーワードではないので、原則として使用しないようにしてください。
- キーワード NOMINVALUE、NOMAXVALUE、NOCYCLE、NOCACHE、および NOORDER を、 NO MINVALUE、NO MAXVALUE、NO CYCLE、NO CACHE、および NO ORDER の同義語として使用することができます。
例
数値なしで RESTART を指定する理由として考えられるのは、 シーケンスを START WITH 値にリセットすることです。 この例では、1 から表の行数までの数値を生成し、一時表を使用して表に追加した列に その数値を挿入しています。
ALTER SEQUENCE ORG_SEQ RESTART
DECLARE GLOBAL TEMPORARY TABLE TEMP_ORG AS
(SELECT NEXT VALUE FOR ORG_SEQ, ORG.*
FROM ORG) WITH DATA
INSERT INTO TEMP_ORG
SELECT NEXT VALUE FOR ORG_SEQ, ORG.*
FROM ORG
以降使用する時には、すべての結果行に番号が付けられて結果が返されます。
ALTER SEQUENCE ORG_SEQ RESTART
SELECT NEXT VALUE FOR ORG_SEQ, ORG.*
FROM ORG