ALTER TABLE ステートメントは、表の定義を変更します。
このステートメントは、アプリケーション・プログラムに組み込んだり、動的 SQL ステートメントを使用して発行したりすることができます。 これは、DYNAMICRULES の実行動作がパッケージに効力を持つ場合にのみ、動的に準備できる実行可能ステートメントです (SQLSTATE 42509)。
タイプ DB2SECURITYLABEL の列を表に追加するには、ステートメントの許可 ID の保持する特権に、少なくとも、表に関連するセキュリティー・ポリシーからのセキュリティー・ラベルが含まれている必要があります。
表からセキュリティー・ポリシーを削除するには、ステートメントの許可 ID の保持する特権に、SECADM 権限が含まれている必要があります。
>>-ALTER TABLE--table-name--------------------------------------> .-------------------------------------------------------------------------. V .-COLUMN-. | >--+-------+-ADD--+-+--------+--| column-definition |-+--------------------------+-+-----+->< | | +-| unique-constraint |-------------+ | | | | +-| referential-constraint |--------+ | | | | +-| check-constraint |--------------+ | | | | +-| distribution-clause |-----------+ | | | | '-RESTRICT ON DROP------------------' | | | | .-MATERIALIZED-. | | | | .-+--------------+--QUERY-. | | | +-ADD--+-------------------------+--| materialized-query-definition |-+ | | +-ALTER--+-FOREIGN KEY-+--constraint-name--| constraint-alteration |--+ | | | '-CHECK-------' | | | | .-COLUMN-. | | | +-ALTER--+--------+--| column-alteration |----------------------------+ | | | .-COLUMN-. | | | +-RENAME--+--------+--source-column-name--TO--target-column-name------+ | | +-DROP--+-PRIMARY KEY---------------------------+---------------------+ | | | +-+-FOREIGN KEY-+--constraint-name------+ | | | | | +-UNIQUE------+ | | | | | | +-CHECK-------+ | | | | | | '-CONSTRAINT--' | | | | | | .-COLUMN-. .-CASCADE--. | | | | | +-+--------+--column-name--+----------+-+ | | | | | '-RESTRICT-' | | | | | '-RESTRICT ON DROP----------------------' | | | +-DROP DISTRIBUTION---------------------------------------------------+ | | | .-MATERIALIZED-. | | | +-DROP--+--------------+--QUERY---------------------------------------+ | | +-DATA CAPTURE--+-NONE---------------------------------+--------------+ | | | '-CHANGES--+-------------------------+-' | | | | '-INCLUDE LONGVAR COLUMNS-' | | | +-ACTIVATE NOT LOGGED INITIALLY--+------------------+-----------------+ | | | '-WITH EMPTY TABLE-' | | | +-PCTFREE--integer----------------------------------------------------+ | | +-LOCKSIZE--+-ROW---------+-------------------------------------------+ | | | +-BLOCKINSERT-+ | | | | '-TABLE-------' | | | +-APPEND--+-ON--+-----------------------------------------------------+ | | | '-OFF-' | | | | .-CARDINALITY-. | | | +-+-VOLATILE-----+--+-------------+-----------------------------------+ | | | '-NOT VOLATILE-' | | | +-COMPRESS--+-YES-+---------------------------------------------------+ | | | '-NO--' | | | +-+-ACTIVATE---+--VALUE COMPRESSION-----------------------------------+ | | | '-DEACTIVATE-' | | | '-LOG INDEX BUILD--+-NULL-+-------------------------------------------' | | +-OFF--+ | | '-ON---' | +-ADD PARTITION--| add-partition |----------------------------------------------------+ +-ATTACH PARTITION--| attach-partition |----------------------------------------------+ +-DETACH PARTITION--partition-name--INTO--table-name1---------------------------------+ +-ADD SECURITY POLICY--policy-name----------------------------------------------------+ '-DROP SECURITY POLICY----------------------------------------------------------------' add-partition |--+----------------+--| boundary-spec |--+---------------------+--> '-partition-name-' '-IN--tablespace-name-' >--+---------------------------------------------------------+--| '-INDEX IN--tablespace-name--+--------------------------+-' '-LONG IN--tablespace-name-' boundary-spec |--+-| starting-clause |--| ending-clause |-+-------------------| '-| ending-clause |----------------------' starting-clause .-,------------. .-FROM-. V | |--STARTING--+------+--+-(----+-constant-+-+--)-+---------------> | +-MINVALUE-+ | | '-MAXVALUE-' | '-+-constant-+-----------' +-MINVALUE-+ '-MAXVALUE-' .-INCLUSIVE-. >--+-----------+------------------------------------------------| '-EXCLUSIVE-' ending-clause .-,------------. .-AT-. V | .-INCLUSIVE-. |--ENDING--+----+--+-(----+-constant-+-+--)-+--+-----------+----| | +-MINVALUE-+ | '-EXCLUSIVE-' | '-MAXVALUE-' | '-+-constant-+-----------' +-MINVALUE-+ '-MAXVALUE-' attach-partition |--+----------------+--| boundary-spec |--FROM--table-name------> '-partition-name-' .-BUILD MISSING INDEXES----. >--+--------------------------+---------------------------------| '-REQUIRE MATCHING INDEXES-' column-definition |--column-name--+-------------------+--+--------------------+---| | (1) | '-| column-options |-' '-| data-type |-----' column-options .--------------------------------------------------------------------------------------------------. V | |----+----------------------------------------------------------------------------------------------+-+--| +-NOT NULL-------------------------------------------------------------------------------------+ | (2) | +-| lob-options |------------------------------------------------------------------------------+ | (3) | +-SCOPE--+-typed-table-name2-+-----------------------------------------------------------------+ | '-typed-view-name2--' | +-+-----------------------------+--+-+-PRIMARY KEY-+-----------------------------------------+-+ | '-CONSTRAINT--constraint-name-' | '-UNIQUE------' | | | +-| references-clause |-----------------------------------+ | | '-CHECK--(--check-condition--)--| constraint-attributes |-' | +-| generated-column-definition |--------------------------------------------------------------+ +-COMPRESS SYSTEM DEFAULT----------------------------------------------------------------------+ | .-COLUMN-. | +-+--------+--SECURED WITH--security-label-name------------------------------------------------+ | .-NOT HIDDEN------------. | | | (4) | | '-+-IMPLICITLY HIDDEN-----+--------------------------------------------------------------------' lob-options .-LOGGED-----. .-NOT COMPACT-. |--●--+------------+--●--+-------------+--●---------------------| '-NOT LOGGED-' '-COMPACT-----' references-clause |--REFERENCES--+-table-name-+--+-----------------------+--------> '-nickname---' | .-,-----------. | | V | | '-(----column-name-+--)-' >--| rule-clause |--| constraint-attributes |-------------------| rule-clause .-ON DELETE NO ACTION-----. .-ON UPDATE NO ACTION-. |--●--+-------------------------+--●--+---------------------+--●--| '-ON DELETE--+-RESTRICT-+-' '-ON UPDATE RESTRICT--' +-CASCADE--+ '-SET NULL-' constraint-attributes .-ENFORCED-----. .-ENABLE QUERY OPTIMIZATION--. |--●--+--------------+--●--+----------------------------+--●----| '-NOT ENFORCED-' '-DISABLE QUERY OPTIMIZATION-' generated-column-definition |--+-| default-clause |--------------------------------------------+--| | .-ALWAYS-----. | +-GENERATED--+------------+--| as-row-change-timestamp-clause |-+ | '-BY DEFAULT-' | | .-ALWAYS-. | '-GENERATED--+--------+--AS--(--generation-expression--)--------' default-clause .-WITH-. |--+------+--DEFAULT--+----------------------------------------------------+--| +-constant-------------------------------------------+ +-datetime-special-register--------------------------+ +-user-special-register------------------------------+ +-CURRENT SCHEMA-------------------------------------+ +-NULL-----------------------------------------------+ +-cast-function--(--+-constant------------------+--)-+ | +-datetime-special-register-+ | | +-user-special-register-----+ | | '-CURRENT SCHEMA------------' | +-EMPTY_CLOB()---------------------------------------+ +-EMPTY_DBCLOB()-------------------------------------+ '-EMPTY_BLOB()---------------------------------------' unique-constraint |--+-----------------------------+--+-UNIQUE------+-------------> '-CONSTRAINT--constraint-name-' '-PRIMARY KEY-' .-,-----------. V | >--(----column-name-+--)----------------------------------------| referential-constraint |--+-----------------------------+------------------------------> '-CONSTRAINT--constraint-name-' .-,-----------. V | >--FOREIGN KEY--(----column-name-+--)--| references-clause |----| check-constraint |--+-----------------------------+------------------------------> '-CONSTRAINT--constraint-name-' >--CHECK--(--| check-condition |--)-----------------------------> >--| constraint-attributes |------------------------------------| check-condition |--+-search-condition----------+--------------------------------| '-| functional-dependency |-' functional-dependency |--+-column-name-----------+--DETERMINED BY--+-column-name-----------+--| | .-,-----------. | | .-,-----------. | | V | | | V | | '-(----column-name-+--)-' '-(----column-name-+--)-' distribution-clause .-,-----------. .-HASH-. V | |--DISTRIBUTE BY--+------+--(----column-name-+--)---------------| materialized-query-definition |--(--fullselect--)--| refreshable-table-options |--------------| refreshable-table-options |--●--DATA INITIALLY DEFERRED--●--REFRESH--+-DEFERRED--+--●-----> '-IMMEDIATE-' .-ENABLE QUERY OPTIMIZATION--. >--+----------------------------+--●----------------------------> '-DISABLE QUERY OPTIMIZATION-' >--+-----------------------------------+--●---------------------| '-MAINTAINED BY--+-SYSTEM---------+-' +-USER-----------+ '-FEDERATED_TOOL-' constraint-alteration .-----------------------------------------. V (5) | |--------+-+-ENABLE--+--QUERY OPTIMIZATION-+-+------------------| | '-DISABLE-' | '-+-----+--ENFORCED---------------' '-NOT-' column-alteration |--column-name--------------------------------------------------> >--+-SET--+-DATA TYPE--| altered-data-type |-----------+--------+--| | +-| generated-column-alteration |------------+ | | +-EXPRESSION AS--(--generation-expression--)-+ | | +-INLINE LENGTH--integer---------------------+ | | '-NOT NULL-----------------------------------' | +-+-| generation-alteration |--+-------------------------+-+-+ | | '-| identity-alteration |-' | | | '-| identity-alteration |--------------------------------' | +-DROP--+-IDENTITY---+---------------------------------------+ | +-EXPRESSION-+ | | +-DEFAULT----+ | | '-NOT NULL---' | +-ADD SCOPE--+-typed-table-name-+----------------------------+ | '-typed-view-name--' | +-COMPRESS--+-SYSTEM DEFAULT-+-------------------------------+ | '-OFF------------' | +-SECURED WITH--security-label-name--------------------------+ '-DROP COLUMN SECURITY---------------------------------------' altered-data-type >>-| built-in-type |------------------------------------------->< built-in-type |--+-+-+-INTEGER-+-+-------------------------------------------------+--| | | '-INT-----' | | | '-BIGINT------' | | .-(5,0)-------------------. | +-+-+-DECIMAL-+-+--+-------------------------+--------------------+ | | '-DEC-----' | | .-,0-------. | | | '-+-NUMERIC-+-' '-(integer-+----------+-)-' | | '-NUM-----' '-,integer-' | | .-(53)------. | +-+-FLOAT--+-----------+--+---------------------------------------+ | | '-(integer)-' | | | +-REAL------------------+ | | | .-PRECISION-. | | | '-DOUBLE--+-----------+-' | | .-(34)-. | +-DECFLOAT--+------+----------------------------------------------+ | '-(16)-' | | .-(1)-------. | +-+-+-+-CHARACTER-+--+-----------+----------+--+--------------+-+-+ | | | '-CHAR------' '-(integer)-' | '-FOR BIT DATA-' | | | | '-+-VARCHAR----------------+--(integer)-' | | | | '-+-CHARACTER-+--VARYING-' | | | | '-CHAR------' | | | | .-(1M)-------------. | | | '-+-CLOB------------------------+--+------------------+-------' | | '-+-CHARACTER-+--LARGE OBJECT-' '-(integer-+---+-)-' | | '-CHAR------' +-K-+ | | +-M-+ | | '-G-' | | .-(1)-------. | +-+-GRAPHIC--+-----------+-------+--------------------------------+ | | '-(integer)-' | | | +-VARGRAPHIC--(integer)--------+ | | | .-(1M)-------------. | | | '-DBCLOB--+------------------+-' | | '-(integer-+---+-)-' | | +-K-+ | | +-M-+ | | '-G-' | | .-(1M)-------------. | '-+-BLOB----------------+--+------------------+-------------------' '-BINARY LARGE OBJECT-' '-(integer-+---+-)-' +-K-+ +-M-+ '-G-' generated-column-alteration |--+-| default-clause |-------------------------------------+---| | .-ALWAYS-----. | +-GENERATED--+------------+--| identity-options |--------+ | '-BY DEFAULT-' | | .-ALWAYS-. | '-GENERATED--+--------+--AS--(--generation-expression--)-' default-clause .-WITH-. |--+------+--DEFAULT--+----------------------------------------------------+--| +-constant-------------------------------------------+ +-datetime-special-register--------------------------+ +-user-special-register------------------------------+ +-CURRENT SCHEMA-------------------------------------+ +-NULL-----------------------------------------------+ +-cast-function--(--+-constant------------------+--)-+ | +-datetime-special-register-+ | | +-user-special-register-----+ | | '-CURRENT SCHEMA------------' | +-EMPTY_CLOB()---------------------------------------+ +-EMPTY_DBCLOB()-------------------------------------+ '-EMPTY_BLOB()---------------------------------------' identity-options |--AS IDENTITY--------------------------------------------------> >--+------------------------------------------------------+-----| | .--------------------------------------------. | | V (5) .-1----------------. | | '-(--------+-START WITH--+-numeric-constant-+---+-+--)-' | .-1----------------. | +-INCREMENT BY--+-numeric-constant-+-+ | .-NO MINVALUE----------------. | +-+-MINVALUE--numeric-constant-+-----+ | .-NO MAXVALUE----------------. | +-+-MAXVALUE--numeric-constant-+-----+ | .-NO CYCLE-. | +-+-CYCLE----+-----------------------+ | .-CACHE 20----------------. | '-+-NO CACHE----------------+--------' '-CACHE--integer-constant-' as-row-change-timestamp-clause (6) |--------FOR EACH ROW ON UPDATE AS ROW CHANGE TIMESTAMP---------| generation-alteration |--SET GENERATED--+-ALWAYS-----+--------------------------------| '-BY DEFAULT-' identity-alteration .---------------------------------------------. V (5) | |--------+-SET INCREMENT BY -numeric-constant--+-+--------------| +-SET--+-NO MINVALUE----------------+-+ | '-MINVALUE--numeric-constant-' | +-SET--+-NO MAXVALUE----------------+-+ | '-MAXVALUE--numeric-constant-' | +-SET--+-NO CYCLE-+-------------------+ | '-CYCLE----' | +-SET--+-NO CACHE----------------+----+ | '-CACHE--integer-constant-' | +-SET--+-NO ORDER-+-------------------+ | '-ORDER----' | '-RESTART--+------------------------+-' '-WITH--numeric-constant-'
table-name でマテリアライズ照会表を指定している場合、変更によって行えるのは、マテリアライズ照会の追加またはドロップ、NOT LOGGED INITIALLY のアクティブ化、RESTRICT ON DROP の追加またはドロップ、data capture、pctfree、locksize、append、volatile、data row compression、または value compression の変更だけです。
table-name が範囲がクラスター化された表を示している場合、 変更によって行えるのは、制約の追加・変更・ドロップ、NOT LOGGED INITIALLY の アクティブ化、 RESTRICT ON DROP の追加またはドロップ、locksize、data capture、または volatile の変更、および列のデ フォルト値の設定だけです。
新しい列を追加する場合、すべての列のバイト・カウントの合計が、 最大レコード・サイズを超えてはなりません。
IMPLICITLY HIDDEN は、ROW CHANGE TIMESTAMP 列にのみ指定する必要があります (SQLSTATE 42867)。ROW CHANGE TIMESTAMP FOR table-designator 式は IMPLICITLY HIDDEN ROW CHANGE TIMESTAMP 列に解決します。 したがって、ROW CHANGE TIMESTAMP 列は IMPLICITLY HIDDEN として表に追加することができ、この表から SELECT * を実行する既存のアプリケーションを、列を処理するために変更する必要はありません。 新規アプリケーションは列名が分からなくても、式を使用することによって常に列にアクセスすることができます。
ユーザーが制約名を指定しない場合は、表に定義されている既存の制約の ID の中でユニークな 18 バイトの長さの ID がシステムによって生成されます。 (ID は、"SQL" と、タイム・スタンプに基づいて生成される一連の 15 の数字から構成されます。)
主キー制約またはユニーク制約とともに使用した場合、 この constraint-name は、 制約をサポートするために作成される索引の名前として使用されます。 ユニーク制約に関連した索引名の詳細については、注を参照してください。
後述の unique-constraint の説明の中の PRIMARY KEY を参照してください。
後述の unique-constraint の説明の中の UNIQUE を参照してください。
『CREATE TABLE』の references-clause を参照してください。
列が特殊タイプを使用して定義される場合、列のデフォルト値は、 特殊タイプにキャストされたソース・データ・タイプのデフォルト値になります。
データ・タイプ | デフォルト値 |
---|---|
数値 | 0 |
固定長文字ストリング | ブランク |
可変長文字ストリング | 長さ 0 のストリング |
固定長 GRAPHIC ストリング | 2 バイトのブランク |
可変長 GRAPHIC ストリング | 長さ 0 のストリング |
日付 | 既存の行の場合、0001 年 1 月 1 日に対応する日付。 追加行の場合には、現在の日付。 |
時刻 | 既存の行の場合、0 時間 0 分 0 秒に対応する時刻。 追加行の場合には、現在の時刻。 |
タイム・スタンプ | 既存の行の場合、0001 年 1 月 1 日 0 時 0 分 0 秒 0 マイクロ秒に対応する日付。 追加行の場合には、現在のタイム・スタンプ。 |
バイナリー・ストリング (blob) | 長さ 0 のストリング |
column-definition から DEFAULT を省略すると、 その列のデフォルト値として NULL 値が使用されます。
DEFAULT キーワードに指定できる値のタイプは、次のとおりです。
指定した値が無効な場合、エラー (SQLSTATE 42894) が戻されます。
システム・デフォルト値がこのような方法で保管されると、 列に対する挿入や更新操作の際に余分な検査が行われるために、 若干パフォーマンスが低下します。
基本データ・タイプは、DATE、TIME、TIMESTAMP、XML、または構造化データ・タイプであってはなりません (SQLSTATE 42842)。 基本データ・タイプが可変長ストリングの場合には、この節は無視されます。 表が VALUE COMPRESSION に設定されている場合は、長さ 0 のストリング値は自動的に圧縮されます。
既存の索引がユニーク・キー定義と一致しているかどうか判別するために、チェックが実行されます (索引内の INCLUDE 列はすべて無視されます)。 列の順序や方向 (ASC/DESC) の指定に関係なく、同じ列セットを指定していると、 索引定義は一致します。 ただしパーティション表の場合、表パーティション・キー列のスーパーセットではない列が含まれる非ユニーク・パーティション索引は、一致する索引と見なされません。
既存の索引が主キー定義と一致しているかどうか判別するために、 チェックが実行されます (索引内の INCLUDE 列はすべて無視されます)。 列の順序や方向 (ASC/DESC) の指定に関係なく、同じ列セットを指定していると、 索引定義は一致します。 ただしパーティション表の場合、表パーティション・キー列のスーパーセットではない列が含まれる非ユニーク・パーティション索引は、一致する索引と見なされません。
1 つの表には、主キーを 1 つだけ定義することができます。
マテリアライズ照会表に fullselect を指定することについての詳細は、 『CREATE TABLE』を参照してください。 追加の制限事項としては、table-name は全選択で直接的にも間接的にも参照できません。
列の新規データ・タイプを指定します。新規データ・タイプは、列の既存データ・タイプにキャスト可能でなければなりません (SQLSTATE 42837)。
既存データの非ブランク文字の切り捨てが発生するストリング・データ・タイプの変更は許可されません (SQLSTATE 42837)。
必要に応じて管理ルーチン SYSPROC.ADMIN_REVALIDATE_DB_OBJECTS を呼び出して、表の再編成を行えます。表が SET INTEGRITY PENDING 状態の場合、表の再編成が必要なデータ・タイプの変更は指定できません (SQLSTATE 57007)。
ストリング・データ・タイプは、列が表パーティション・キーの列である場合、変更できません。
データ・タイプが LOB の場合、指定される長さを既存の長さより小さくすることはできません (SQLSTATE 42837)。
ID 列のデータ・タイプは変更できません (SQLSTATE 42997)。
表に対してデータ・キャプチャーを有効にすることはできません (SQLSTATE 42997)。
列を変更する場合、すべての列のバイト・カウントの合計が、 最大レコード・サイズを超えてはなりません (SQLSTATE 54010)。 ユニーク制約または索引で列を使用する場合、新しい長さは、 ユニーク制約または索引の列の保管長の合計が、ページ・サイズに対応する索引キーの長さの上限を超えないようにしなければなりません (SQLSTATE 54008)。 保管される列の長さについては、『CREATE TABLE』の『バイト・カウント』を参照してください。 キー長の制限については、『SQL の制限』を参照してください。
auto_reval が DISABLED に設定されている場合、列を変更した時のカスケード効果は表 2に示されています。
操作 | 影響 |
---|---|
ビューまたはチェック制約によって参照される列を変更する。 | 変更処理中にオブジェクトが再生成されます。 ビューの場合、変更操作の後、オブジェクトのセマンティクスが変わり、オブジェクトについての関数やメソッドの解決方法が変わる可能性もあります。 チェック制約の場合、変更操作の結果としてオブジェクトのセマンティクスが変わるようであれば、操作は失敗します。 |
従属パッケージ、トリガー、または SQL ルーチンを持つ表の列を変更する。 | オブジェクトが無効とマークされ、次回の使用時に再度有効性を確かめられます。 |
分解が使用可能になった XSROBJECT によって参照される表内の列のタイプを変更する。 | XSROBJECT が分解操作不能とマークされます。 XSROBJECT の分解を再度使用可能にするには、マッピングの再調整が必要になる可能性があります。それに続いて、XSROBJECT に対して ALTER XSROBJECT ENABLE DECOMPOSITION ステートメントを実行します。 |
グローバル変数のデフォルトの式で参照される列の変更 | グローバル変数のデフォルトの式は変更処理中に妥当性検査されます。 デフォルトの式で使用されるユーザー定義関数を解決できない場合、操作は失敗します。 |
column-name のデータ・タイプは、構造化タイプ、XML、または LOB データ・タイプでなければなりません (SQLSTATE 42842)。
構造化タイプ列のデフォルトのインライン長は、そのデータ・タイプのインライン長になります (明示的に指定するか、または CREATE TYPE ステートメント内のデフォルトとして)。構造化タイプのインライン長が 292 未満の場合、列のインライン長には値 292 が使われます。
明示的なインライン長の値は増やすことのみ可能で (SQLSTATE 429B2)、32673 を超えてはなりません (SQLSTATE 54010)。 構造化タイプ列または XML データ・タイプ列の場合、少なくとも 292 でなければなりません。LOB データ・タイプ列の場合、INLINE LENGTH は最大 LOB 記述子サイズより小さくてはなりません。
列を変更する場合、すべての列のバイト・カウントの合計が、行サイズの制限を超えてはなりません (SQLSTATE 54010)。
UPDATE table-name SET lob-column = lob-column
WHERE LENGTH(lob-column) <= chosen-inline-length - 4
table-name は LOB データ・タイプ列のインライン長が変更された表、lob-column は変更された LOB データ・タイプ列、chosen-inline-length は選択された INLINE LENGTH の新規値です。ROW CHANGE TIMESTAMP 列は 1 つの表内に 1 つだけ含めることができます (SQLSTATE 428C1)。 data-type を指定する場合は、TIMESTAMP または TIMESTAMP(6) でなければなりません (SQLSTATE 42842)。ROW CHANGE TIMESTAMP 列は DEFAULT 節を持つことができません (SQLSTATE 42623)。 ROW CHANGE TIMESTAMP 列には NOT NULL を指定する必要があります (SQLSTATE 42831)。
この値は、この列に割り当て可能な任意の正または負の値にすることができます (SQLSTATE 42815)。これは長精度整数定数の値を超えず (SQLSTATE 42820)、小数点の右側に非ゼロの数字がない値にします (SQLSTATE 428FA)。
この値が負の場合、ALTER ステートメント以降は降順になります。 この値が 0 の場合、または正の場合は、 ALTER ステートメント以降は昇順になります。
CYCLE が有効な場合、一つの ID 列で生成される値が重複する可能性があります。 固有値が必要であれば (実際には必要ありません)、ID 列を使用して 1 列のユニーク索引を 定義することによって、固有性を確実にしてください。 このような ID 列にユニーク索引が存在し、固有ではない値が生成されると、エラーが起こります (SQLSTATE 23505)。
このオプションが指定されると、ID 列の値はキャッシュに保管されません。 この場合、新しい ID 値が要求されるたびに、ログに対して同期入出力が行われます。
ID 列に新しい値が必要でも使用可能な未使用の値がキャッシュにない場合、値の割り振りはログへの入出力を待機する必要があります。 ただし、ID 列に新しい値が必要で、未使用の値がキャッシュにあれば、 その ID 値の割り振りが、ログへの入出力なしで素早く行われます。
システム障害に起因するものであっても通常のものであっても、データベース非アクティブ化が起こると、 コミットされたステートメントで使用されていないキャッシュ済みシーケンス値はすべて失われます (使用されなくなります)。 CACHE オプションに指定する値は、システム障害の際に失われても構わない ID 列の値の最大数です。
最小値は 2 です (SQLSTATE 42815)。
列は、指定した表の中に存在していなければならず (SQLSTATE 42703)、 あらかじめ IDENTITY 属性で定義されていなければなりません (SQLSTATE 42837)。 RESTART は、START WITH の元の値を変更することはありません。
numeric-constant は数値定数で、小数点の右側に非ゼロの数字がない (SQLSTATE 428FA) かぎり、この列に割り当てることができる正または負の値にすることができます(SQLSTATE 42815)。 numeric-constant が列の次の値として使用されます。
システム・デフォルト値がこのような方法で保管されると、 列上での挿入や更新操作の際に余分な検査が行われるために、若干パフォーマンスが低下します。
列の既存のデータは変更されません。 既存のデータを使用可能にして、 最小限のスペースを使用してシステム・デフォルト値を保管することの利点を生かすため、 オフラインでの表再編成を考慮してください。
基本データ・タイプは、DATE、TIME、または TIMESTAMP であってはなりません (SQLSTATE 42842)。 基本データ・タイプが可変長ストリングの場合には、この節は無視されます。 表が VALUE COMPRESSION に設定されている場合は、長さ 0 のストリング値は自動的に圧縮されます。
変更する表が型付き表である場合、 列をスーパー表から継承することはできません (SQLSTATE 428DJ)。
操作 | RESTRICT の効果 | CASCADE の効果 |
---|---|---|
ビューまたはトリガーによって参照される列をドロップする。 | 列のドロップは許可されません。 | そのオブジェクト自身とそのオブジェクトに従属するすべてのオブジェクトがドロップされます。 |
索引のキーで参照される列をドロップする。 | 索引で参照されているすべての列が、同じ ALTER TABLE ステートメントでドロップされていれば、索引のドロップが許可されます。 それ以外の場合は、列のドロップは許可されません。 | 索引がドロップされます。 |
ユニーク制約で参照されている列をドロップする。 | ユニーク制約で参照されているすべての列が、同じ ALTER TABLE ステートメントでドロップされていれば、また、ユニーク制約が参照制約によって参照されていなければ、列と制約がドロップされます。(制約を成立させるために使用されている索引もドロップされます) それ以外の場合は、列のドロップは許可されません。 | ユニーク制約と、そのユニーク制約を参照するあらゆる参照制約がドロップされます。 (これらの制約によって使用される索引もすべてドロップされます。) |
参照制約で参照されている列をドロップする。 | 参照制約で参照されているすべての列が、同じ ALTER TABLE ステートメントでドロップされていれば、列と制約がドロップされます。 それ以外の場合は、列のドロップは許可されません。 | 参照制約がドロップされます。 |
ドロップされないシステム生成列によって参照されている列をドロップする。 | 列のドロップは許可されません。 | 列のドロップは許可されません。 |
チェック制約で参照されている列をドロップする。 | 列のドロップは許可されません。 | チェック制約がドロップされます。 |
分解可能な XSROBJECT で参照されている列をドロップする。 | 列のドロップは許可されません。 | XSROBJECT が分解操作不能とマークされます。 XSROBJECT の分解を再度使用可能にするには、マッピングの再調整が必要になる可能性があります。それに続いて、XSROBJECT に対して ALTER XSROBJECT ENABLE DECOMPOSITION ステートメントを実行します。 |
グローバル変数のデフォルトの式で参照される列のドロップ | 列のドロップは許可されません。 | グローバル変数はドロップされます。 ただし、グローバル変数に依存する他のオブジェクト (カスケードを許可しないオブジェクト) があるためにグローバル変数のドロップが許可されなければ、ドロップされません。 |
表が型付き表である場合、 このオプションはサポートされません (ルート表の場合は SQLSTATE 428DH で、 他の副表の場合は 428DR)。
このステートメントを使用して表を変更した後に、同一の作業単位内で INSERT、DELETE、UPDATE、CREATE INDEX、DROP INDEX、または ALTER TABLE ステートメントによって表に対して行う変更は、ログ記録されません。 NOT LOGGED INITIALLY 属性が活動状態にあるときに、 ALTER ステートメントによってシステム・カタログに対して行われた変更は、ログ記録されます。 同一の作業単位内でのシステム・カタログ情報に対する以降の変更は、ログ記録されます。
現行の作業単位が完了すると、NOT LOGGED INITIALLY 属性は非活動化され、 それ以降の作業単位の表で行われるすべての操作はログ記録されます。
カタログ表へのデータの挿入中にロックを避けるためにこのフィーチャーを使用する場合、 ALTER TABLE ステートメントにはこの節だけを指定してください。 ALTER TABLE ステートメントでこの節以外のものを指定すると、 カタログはロックされてしまいます。 ALTER TABLE ステートメントでこの節のみが指定されている場合、 SHARE ロックのみがシステム・カタログ表で獲得されます。 これにより、このステートメントの実行時から、このステートメントの実行作業単位の終了時までの間で、並行する競合の可能性をかなり低減させることができます。
表が型付き表である場合、このオプションは、型付き表階層のルート表に対してのみサポートされます (SQLSTATE 428DR)。
NOT LOGGED INITIALLY 属性の詳細については、 『CREATE TABLE』にあるこの属性に関する記述を参照してください。
この処置が必要な場合、対象の表に定義された DELETE トリガーは行われません。 この表に存在するすべての索引の索引データも削除されます。
アタッチされたデータ・パーティションまたは論理的にデタッチされたパーティションを持つパーティション表は空にできません (SQLSTATE 42928)。
APPEND OFF を設定した後に表の再編成が必要となります。 これは、使用可能なフリー・スペース情報が不正確となるため、 データ挿入時のパフォーマンスの低下につながるからです。
starting-clause が省略されると、新規のデータ・パーティションは、表の末尾に入るものと想定されます。 ending-clause が省略されると、新規のデータ・パーティションは、表の先頭に入るものと想定されます。
新規の索引パーティションで使用される表スペースは、デフォルトであっても INDEX IN 節で指定されていても、他のすべての索引パーティションで使用される表スペースのタイプ (SMS または DMS)、ページ・サイズ、およびエクステント・サイズと一致していなければなりません (SQLSTATE 42838)。
パーティション表で LONG IN 節の使用を制御する規則については、『パーティション表でのラージ・オブジェクトの動作』を参照してください。
starting-clause が省略されると、新規のデータ・パーティションは、表の末尾に入るものと想定されます。 ending-clause が省略されると、新規のデータ・パーティションは、表の先頭に入るものと想定されます。
属性を変更したログ・レコードをキャプチャー・プログラムが処理する前に、 変更データ表を変更していなければ、キャプチャー・プログラムが失敗する場合があります。 コピーを保持しているサブスクリプションを実行する前に、 変更対象の列が含まれるコピーを変更していなければ、 そのサブスクリプションは失敗する可能性があります。
アタッチされたパーティションをオンラインにするには、ターゲット表に対して SET INTEGRITY ステートメントを発行する必要があります。
REQUIRE MATCHING INDEXES 節が指定された場合、ターゲット表が DB2 V9.7 フィックスパック 1 以降のリリースで作成されたパーティション MDC 表であれば、ALTER TABLE ... ATTACH PARTITION ステートメントは失敗して SQL20307N を戻します (SQLSTATE 428GE)。REQUIRE MATCHING INDEXES 節を除去すれば、アタッチ処理を進めることができます。
ターゲットのパーティション MDC 表が DB2 V9.7 フィックスパック 1 より前に作成されている場合、ブロック索引は非パーティション索引です。 ソース MDC 表のブロック索引が ATTACH 操作中にドロップされます。アタッチされたパーティションをオンラインにするには、ターゲット表に対して SET INTEGRITY ステートメントを発行する必要があります。 ブロック索引は非パーティション・ブロック索引として作成されます。
DB2 V9.7 フィックスパック 1 以降のリリースを使用して作成されたパーティション MDC 表からパーティションをデタッチする場合、ブロック索引はパーティション化されているので、これらの制約事項は適用されません。 従属 MQT などの従属オブジェクトが他に存在しないとすれば、新たにデタッチされた表へのアクセスが同一作業単位内で可能です。 ブロック索引を含めすべてのパーティション索引は、再作成の必要なくターゲット表の索引になります。
ALTER TABLE DEPARTMENT
ADD RATING CHAR(1)
ALTER TABLE PROJECT
ADD SITE_NOTES VARCHAR(1000) FOR BIT DATA
Column Name Data Type
EQUIP_NO INT
EQUIP_DESC VARCHAR(50)
LOCATION VARCHAR(50)
EQUIP_OWNER CHAR(3)
EQUIPMENT 表に、
所有者 (EQUIP_OWNER) は DEPARTMENT 表に存在する部門番号 (DEPTNO) でなければならない、
という参照制約を追加します。
DEPTNO は、DEPARTMENT 表の主キーです。
DEPARTMENT 表からある部門を削除する場合は、
その部門の所有するすべての備品の所有者 (EQUIP_OWNER) の値を割り当て解除する必要があります (つまり NULL 値に設定する必要があります)。
制約の名前は、DEPTQUIP です。
ALTER TABLE EQUIPMENT
ADD CONSTRAINT DEPTQUIP
FOREIGN KEY (EQUIP_OWNER)
REFERENCES DEPARTMENT
ON DELETE SET NULL
ALTER TABLE EQUIPMENT
ADD COLUMN EQUIP_QTY
SMALLINT NOT NULL DEFAULT 1
ALTER TABLE EMPLOYEE
ADD CONSTRAINT REVENUE
CHECK (SALARY + COMM > 30000)
ALTER TABLE EMPLOYEE
DROP CONSTRAINT REVENUE
ALTER TABLE SALARY1
DATA CAPTURE NONE
ALTER TABLE SALARY2
DATA CAPTURE CHANGES
ALTER TABLE EMPLOYEE
ADD COLUMN HEIGHT MEASURE DEFAULT MEASURE(1)
ADD COLUMN BIRTHDAY BIRTHDATE DEFAULT DATE('01-01-1850')
ADD COLUMN FLAGS BLOB(1M) DEFAULT BLOB(X'01')
ADD COLUMN PHOTO PICTURE DEFAULT BLOB(X'00')
デフォルト値の指定時に、これらのデフォルト値はさまざまな関数名を使用します。
MEASURE は INTEGER に基づく特殊タイプなため、MEASURE 関数が使用されます。
HEIGHT 列のデフォルト値は、MEASURE のソース・タイプは、BLOB または日時データ・タイプでないため、関数を使用しなくても指定しておくことができました。
BIRTHDATE は DATE に基づく特殊タイプなので、
DATE 関数を使用しています (この場合、BIRTHDATE は使用できません)。
FLAGS 列と PHOTO 列では、PHOTO が特殊タイプであるにもかかわらず、
BLOB 関数を使用してデフォルト値が指定されています。
BIRTHDAY、FLAGS、
および PHOTO 列のデフォルト値を指定するためには、関数を使用する必要があります。
タイプが、BLOB や日時データ・タイプのソースに基づく BLOB や特殊タイプだからです。 Column Name Data Type
BRANCH_NO SMALLINT
CUSTOMER_NO DECIMAL(7)
CUSTOMER_NAME VARCHAR(50)
ALTER TABLE CUSTOMERS
ADD DISTRIBUTE BY HASH (BRANCH_NO)
ALTER TABLE EMPLOYEE
ADD COLUMN PHONE_NO CHAR(4) NOT NULL
ADD COLUMN WORK_DEPT CHAR(3)
ADD PRIMARY KEY (EMP_NO, WORK_DEPT)
ALTER TABLE DEPARTMENT
ADD CONSTRAINT FD1
CHECK ( DEPTNAME DETERMINED BY DEPTNO) NOT ENFORCED
ALTER TABLE DEPARTMENT
DROP CHECK FD1
ALTER TABLE EMPLOYEE
ALTER COLUMN WORKDEPT
SET DEFAULT '123'
ALTER TABLE EMPLOYEE
ADD SECURITY POLICY DATA_ACCESS
ALTER TABLE EMPLOYEE
ALTER COLUMN SALARY
SECURED WITH EMPLOYEESECLABEL
Column Name Data Type
----------- ---------
EMP_NAME VARCHAR(50) NOT NULL
EMP_ID SMALLINT NOT NULL
EMP_POSITION VARCHAR(100) NOT NULL
SALARY DECIMAL(5,2)
PROMOTION_DATE DATE NOT NULL
この表を変更して、給料を DECIMAL(6,2) 列に保管できるようにし、PROMOTION_DATE を NULL 値への設定が可能なオプションのフィールドにし、EMP_POSITION 列を除去します。
ALTER TABLE SALARY_DATA
ALTER COLUMN SALARY SET DATA TYPE DECIMAL(6,2)
ALTER COLUMN PROMOTION_DATE DROP NOT NULL
DROP COLUMN EMP_POSITION
ALTER TABLE BOOKS
ADD COLUMN DATE_ADDED TIMESTAMP
WITH DEFAULT CURRENT TIMESTAMP