ALTER TABLE ステートメントは、表の定義を変更します。
このステートメントは、アプリケーション・プログラムに組み込んだり、動的 SQL ステートメントを使用して発行したりすることができます。 これは、DYNAMICRULES の実行動作がパッケージに効力を持つ場合にのみ、動的に準備できる実行可能ステートメントです (SQLSTATE 42509)。
タイプ DB2SECURITYLABEL の列を表に追加するには、ステートメントの許可 ID の保持する特権に、少なくとも、表に関連するセキュリティー・ポリシーからのセキュリティー・ラベルが含まれている必要があります。
表からセキュリティー・ポリシーを削除するには、ステートメントの許可 ID の保持する特権に、SECADM 権限が含まれている必要があります。
行と列のアクセス制御を ACTIVATE および DEACTIVATE するように表を変更する場合は、ステートメントの許可 ID が持つ特権に、SECADM 権限が含まれている必要があります。
>>-ALTER TABLE--table-name--------------------------------------> .-----------------------------------------------------------------------------. V (1) .-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 |----------------------------+ | | | (2) | | | +-+-ACTIVATE---+--ROW ACCESS CONTROL----------------------------------+ | | | '-DEACTIVATE-' | | | | (3) | | | +-+-ACTIVATE---+--COLUMN ACCESS CONTROL-------------------------------+ | | | '-DEACTIVATE-' | | | +-RENAME COLUMN--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---------------------------------------+ | | +-ADD PERIOD--| period-definition |-----------------------------------+ | | +-DROP PERIOD--period-name--------------------------------------------+ | | +-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-' | | | | .-ADAPTIVE-. | | | +-COMPRESS--+-YES-+----------+-+--------------------------------------+ | | | | '-STATIC---' | | | | | '-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 VERSIONING--USE HISTORY TABLE--history-table-name-----------------------------------+ '-DROP VERSIONING-------------------------------------------------------------------------' 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--+-------------------+--+--------------------+---| | (4) | '-| column-options |-' '-| data-type |-----' column-options .--------------------------------------------------------------------------------------------------. V | |----+----------------------------------------------------------------------------------------------+-+--| +-NOT NULL-------------------------------------------------------------------------------------+ | (5) | +-| lob-options |------------------------------------------------------------------------------+ | (6) | +-SCOPE--+-typed-table-name2-+-----------------------------------------------------------------+ | '-typed-view-name2--' | +-+-----------------------------+--+-+-UNIQUE------+-----------------------------------------+-+ | '-CONSTRAINT--constraint-name-' | '-PRIMARY KEY-' | | | +-| references-clause |-----------------------------------+ | | '-CHECK--(--check-condition--)--| constraint-attributes |-' | | (7) | +-----+-| default-clause |---+-----------------------------------------------------------------+ | '-| generated-clause |-' | +-COMPRESS SYSTEM DEFAULT----------------------------------------------------------------------+ | .-COLUMN-. | +-+--------+--SECURED WITH--security-label-name------------------------------------------------+ | .-NOT HIDDEN--------. | '-+-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----------------------. |--●--+-------------------------------+--●----------------------> | .-TRUSTED-----. | '-NOT ENFORCED--+-------------+-' '-NOT TRUSTED-' .-ENABLE QUERY OPTIMIZATION--. >--+----------------------------+--●----------------------------| '-DISABLE QUERY OPTIMIZATION-' default-clause .-WITH-. |--+------+--DEFAULT--+----------------------------------------------------+--| +-constant-------------------------------------------+ +-datetime-special-register--------------------------+ +-user-special-register------------------------------+ +-CURRENT SCHEMA-------------------------------------+ +-CURRENT MEMBER-------------------------------------+ +-NULL-----------------------------------------------+ +-cast-function--(--+-constant------------------+--)-+ | +-datetime-special-register-+ | | +-user-special-register-----+ | | '-CURRENT SCHEMA------------' | +-EMPTY_CLOB()---------------------------------------+ +-EMPTY_DBCLOB()-------------------------------------+ '-EMPTY_BLOB()---------------------------------------' generated-clause .-ALWAYS-----. |--+-GENERATED--+------------+--| as-row-change-timestamp-clause |------+--| | '-BY DEFAULT-' | | .-ALWAYS-. | '-GENERATED--+--------+--+-| as-generated-expression-clause |------+-' +-| as-row-transaction-timestamp-clause |-+ '-| as-row-transaction-start-id-clause |--' as-row-change-timestamp-clause (8) |--------FOR EACH ROW ON UPDATE AS ROW CHANGE TIMESTAMP---------| as-generated-expression-clause |--AS--(--generation-expression--)------------------------------| as-row-transaction-timestamp-clause |--AS--ROW--+-BEGIN-+-------------------------------------------| '-END---' as-row-transaction-start-id-clause |--AS--TRANSACTION START ID-------------------------------------| unique-constraint |--+-----------------------------+--+-UNIQUE------+-------------> '-CONSTRAINT--constraint-name-' '-PRIMARY KEY-' .-,---------------. V | >--(------column-name---+--+------------------------------------+--)--| '-,--BUSINESS_TIME--WITHOUT OVERLAPS-' 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--------------. >--+-----------------------------------+--●---------------------| '-MAINTAINED BY--+-USER-----------+-' '-FEDERATED_TOOL-' constraint-alteration .-------------------------------------------. V (9) | |--------+-+-ENABLE--+--QUERY OPTIMIZATION---+-+----------------| | '-DISABLE-' | '-+-ENFORCED----------------------+-' | .-TRUSTED-----. | '-NOT ENFORCED--+-------------+-' '-NOT TRUSTED-' column-alteration |--column-name--+-SET--+-DATA TYPE--| altered-data-type |---------------+----------------+--| | +-NOT NULL---------------------------------------+ | | +-INLINE LENGTH--integer-------------------------+ | | +-| default-clause |-----------------------------+ | | +-EXPRESSION--| as-generated-expression-clause |-+ | | '-+-NOT HIDDEN--------+--------------------------' | | '-IMPLICITLY HIDDEN-' | +-SET--| generation-alteration |-----------------------------------------+ +-+--------------------------------+--| identity-alteration |------------+ | '-SET--| generation-alteration |-' | +-SET--| generation-attribute |--| as-identity-clause |------------------+ | .-ALWAYS-. | +-SET GENERATED--+--------+--+-| as-generated-expression-clause |------+-+ | +-| as-row-transacton-start-id-clause |---+ | | '-| as-row-transaction-timestamp-clause |-' | +-DROP--+-DEFAULT---+----------------------------------------------------+ | +-GENERATED-+ | | '-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 |-------+----------------------------------| | (10) | '-distinct-type-name------' 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-' as-identity-clause |--AS IDENTITY--------------------------------------------------> >--+------------------------------------------------------+-----| | .--------------------------------------------. | | V (9) .-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-' generation-alteration |--SET GENERATED--+-ALWAYS-----+--------------------------------| '-BY DEFAULT-' identity-alteration .---------------------------------------------. V (9) | |--------+-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-' generation-attribute .-ALWAYS-----. |--GENERATED--+------------+------------------------------------| '-BY DEFAULT-' period-definition |--+-SYSTEM_TIME---+--(--begin-column-name--,--end-column-name--)--| '-BUSINESS_TIME-'
table-name でマテリアライズ照会表を指定している場合、 変更によって行えるのは、マテリアライズ照会の追加またはドロップ、 ACTIVATING 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 の変更、および列のデ フォルト値の設定だけです。
新しい列を追加する場合、すべての列のバイト・カウントの合計が、 最大レコード・サイズを超えてはなりません。
表がシステム期間テンポラル表である場合、関連した履歴表にも列が追加されます。
追加される列が、式に基づく生成列である場合、列マスクが定義されている列をその式で参照することはできません (SQLSTATE 42621)。
マスクまたは権限が定義されている表、あるいはマスクまたは権限の定義で参照されている表に列を追加する場合、そのマスクまたは権限は無効になります。 列アクセス制御がアクティブになっている表に無効なマスクが定義されている場合、その表に対するアクセスは、その無効なマスクを使用不可化、ドロップ、または再作成するまではブロックされます (SQLSTATE 560D0)。行アクセス制御がアクティブになっている表に無効な行権限が定義されている場合、その表に対するアクセスは、その無効な行権限を使用不可化、ドロップ、または再作成するまではブロックされます (SQLSTATE 560D0)。
ユーザーが制約名を指定しない場合は、表に定義されている既存の制約の 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) が戻されます。
データベース・マネージャーが列の値を生成することを指定します。 その列が ID 列、行変更タイム・スタンプ列、行開始列、行終了列、トランザクション開始 ID 列、または生成式列であると見なされる場合、GENERATED を指定する必要があります。
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 01695)。 これは、競合するトランザクションがシステム期間テンポラル表の同じ行を更新しているときに行われる場合があります。 このタイム・スタンプ値の調整を行うには、 データベース構成パラメーター systime_period_adj を Yes に設定する必要があります。 そのように設定されていないと、エラーが戻されます (SQLSTATE 57062)。単一の SQL トランザクション内で複数の行が挿入または更新され、調整が必要ではない場合、行開始列の値はすべての行において同じになり、別のトランザクションでその列のために生成された値とは異なる固有の値になります。 行開始列は期間 SYSTEM_TIME の開始列として必要になります。このタイプの生成列は、この使用目的で準備されています。
表に含めることができる行開始列は 1 つだけです (SQLSTATE 428C1)。 data-type が指定されない場合、 列は TIMESTAMP(12) として定義されます。data-type を指定する場合は、TIMESTAMP(12) でなければなりません (SQLSTATE 42842)。この場合、列は NOT NULL として定義される必要があります (SQLSTATE 42831)。行開始列は更新できません。
これを指定すると、行が挿入されるとき、または行内のいずれかの列が更新されるときには常に、データベース・マネージャーによって列のデータ・タイプの値が割り当てられます。 割り当てられる値は TIMESTAMP の「9999-12-30-00.00.00.000000000000」です。
行終了列が期間 SYSTEM_TIME の 2 番目の列として必要になります。このタイプの生成列は、この使用目的で準備されています。
表に含めることができる行終了列は 1 つだけです (SQLSTATE 428C1)。 data-type が指定されない場合、 列は TIMESTAMP(12) として定義されます。data-type を指定する場合は、TIMESTAMP(12) でなければなりません (SQLSTATE 42842)。この場合、列は NOT NULL として定義される必要があります (SQLSTATE 42831)。行終了列は更新できません。
トランザクション開始 ID 列がシステム期間テンポラル表に必要になります。このタイプの生成列は、この使用目的で準備されています。
表に含めることができるトランザクション開始 ID 列は 1 つだけです (SQLSTATE 428C1)。 data-type が指定されない場合、 列は TIMESTAMP(12) として定義されます。data-type を指定する場合は、TIMESTAMP(12) でなければなりません。トランザクション開始 ID 列は更新できません。
システム・デフォルト値がこのような方法で保管されると、 列に対する挿入や更新操作の際に余分な検査が行われるために、 若干パフォーマンスが低下します。
基本データ・タイプは、DATE、TIME、TIMESTAMP、XML、または構造化データ・タイプであってはなりません (SQLSTATE 42842)。 基本データ・タイプが可変長ストリングの場合には、この節は無視されます。 表が VALUE COMPRESSION に設定されている場合は、長さ 0 のストリング値は自動的に圧縮されます。
既存の索引がユニーク・キー定義と一致しているかどうか判別するために、チェックが実行されます (索引内の INCLUDE 列はすべて無視されます)。 列の順序や方向 (ASC/DESC) の指定に関係なく、同じ列セットを指定していると、 索引定義は一致します。 ただしパーティション表の場合、表パーティション・キー列のスーパーセットではない列が含まれる非ユニーク・パーティション索引は、一致する索引と見なされません。
パーティション BUSINESS_TIME WITHOUT OVERLAPS 索引がある、範囲がパーティション化されたアプリケーション期間テンポラル表にパーティションをアタッチする際は、そのパーティション BUSINESS_TIME WITHOUT OVERLAPS 索引と一致する索引がソース表になければなりません。さらに、それらの索引で PERIODNAME 属性および PERIODPOLICY 属性が一致していなければなりません。
BUSINESS_TIME WITHOUT OVERLAPS を指定すると、BUSINESS_TIME では重なり合う期間は許可されず、それ以外のキーの値は、BUSINESS_TIME のどの期間においても固有でなければなりません。 BUSINESS_TIME WITHOUT OVERLAPS を指定すると、期間 BUSINESS_TIME の終了列および開始列が (この順序で) 自動的に昇順で索引キーに追加され、時間の重なり合いがないように強制されます。BUSINESS_TIME を定義するために使用される列は、制約の一部として指定することはできません (SQLSTATE 428HW)。
既存の索引が主キー定義と一致しているかどうか判別するために、 チェックが実行されます (索引内の INCLUDE 列はすべて無視されます)。 列の順序や方向 (ASC/DESC) の指定に関係なく、同じ列セットを指定していると、 索引定義は一致します。 ただしパーティション表の場合、表パーティション・キー列のスーパーセットではない列が含まれる非ユニーク・パーティション索引は、一致する索引と見なされません。
パーティション BUSINESS_TIME WITHOUT OVERLAPS 索引がある、範囲がパーティション化されたアプリケーション期間テンポラル表にパーティションをアタッチする際は、そのパーティション BUSINESS_TIME WITHOUT OVERLAPS 索引と一致する索引がソース表になければなりません。さらに、それらの索引で PERIODNAME 属性および PERIODPOLICY 属性が一致していなければなりません。
1 つの表には、主キーを 1 つだけ定義することができます。
BUSINESS_TIME WITHOUT OVERLAPS を指定すると、BUSINESS_TIME では重なり合う期間は許可されず、それ以外のキーの値は、BUSINESS_TIME のどの期間においても固有でなければなりません。 BUSINESS_TIME WITHOUT OVERLAPS を指定すると、期間 BUSINESS_TIME の終了列および開始列が (この順序で) 自動的に昇順で索引キーに追加され、時間の重なり合いがないように強制されます。BUSINESS_TIME を定義するために使用される列は、制約の一部として指定することはできません (SQLSTATE 428HW)。
materizalized-query-definition の fullselect で直接的または間接的に参照される表において、行レベルまたは列レベルのアクセス制御がアクティブになっていて、変更される表では行レベルのアクセス制御がアクティブになっていない場合、変更される表では行レベルのアクセス制御が暗黙的にアクティブになります。 これにより、マテリアライズ照会表の内容への直接アクセスが制限されます。 行に対するそのような行権限が定義される前に表を照会で明示的に参照すると、表にデータがないことを示す警告が返されます (SQLSTATE 02000)。 マテリアライズ照会表にアクセスするには、適切な行権限を作成します。またはふさわしいようであれば、マテリアライズ照会表に対する ALTER TABLE DEACTIVATE ROW ACCESS CONTROL を発行して、行レベルの保護を除去します。
マテリアライズ照会表が、行レベルまたは列レベルのアクセス制御がアクティブな表を参照している場合、materizalized-query-definition の fullselect で参照されている関数は、SECURED 属性を指定して定義されていなければなりません (SQLSTATE 428EC)。
マテリアライズ照会表に変更する表に権限 (システム生成のデフォルトの権限を除く) または マスクが定義されている場合、ALTER は失敗します (SQLSTATE 428EW)。
マテリアライズ照会表に fullselect を指定することについての詳細は、 『CREATE TABLE』を参照してください。追加の制限事項としては、table-name は全選択で直接的にも間接的にも参照できません。
既存データの非ブランク文字の切り捨てが発生するストリング・データ・タイプの変更は許可されません (SQLSTATE 42837)。
必要に応じて管理ルーチン SYSPROC.ADMIN_REVALIDATE_DB_OBJECTS を呼び出して、表の再編成を行えます。表が SET INTEGRITY PENDING 状態の場合、表の再編成が必要なデータ・タイプの変更は指定できません (SQLSTATE 57007)。
ストリング・データ・タイプは、列が表パーティション・キーの列である場合、変更できません。
データ・タイプが LOB の場合、指定される長さを既存の長さより小さくすることはできません (SQLSTATE 42837)。
ID 列のデータ・タイプは変更できません (SQLSTATE 42997)。
ROW BEGIN、ROW END、または TRANSACTION START ID として定義された列のデータ・タイプは、変更できません (SQLSTATE 428FR)。
BUSINESS_TIME 期間列のデータ・タイプおよび NULL 可能性は、変更できません (SQLSTATE 428FR)。
表に対してデータ・キャプチャーを有効にすることはできません (SQLSTATE 42997)。
列を変更する場合、すべての列のバイト・カウントの合計が、 最大レコード・サイズを超えてはなりません (SQLSTATE 54010)。 ユニーク制約または索引で列を使用する場合、新しい長さにより、 ユニーク制約または索引の列の保管長の合計が、ページ・サイズに対応する索引キーの長さの上限を超えないようにしなければなりません (SQLSTATE 54008)。 保管される列の長さについては、『CREATE TABLE』の『バイト・カウント』を参照してください。 キーの長さの制限については、『SQL と XML の制限値』を参照してください。
auto_reval が DISABLED に設定されている場合、列を変更した時のカスケード効果は表 2に示されています。
行権限または列マスクのいずれかが変更対象の列に依存している場合 (依存関係は SYSCAT.CONTROLDEP カタログ・ビューに記録されます)、エラーが戻されます (SQLSTATE 42917)。
操作 | 影響 |
---|---|
ビューまたはチェック制約によって参照される列を変更する。 | 変更処理中にオブジェクトが再生成されます。 ビューの場合、変更操作の後、オブジェクトのセマンティクスが変わり、オブジェクトについての関数やメソッドの解決方法が変わる可能性もあります。 チェック制約の場合、変更操作の結果としてオブジェクトのセマンティクスが変わるようであれば、操作は失敗します。 |
従属パッケージ、トリガー、または SQL ルーチンを持つ表の列を変更する。 | オブジェクトが無効とマークされ、次回の使用時に再度有効性を確かめられます。 |
分解が使用可能になった XSROBJECT によって参照される表内の列のタイプを変更する。 | XSROBJECT が分解操作不能とマークされます。 XSROBJECT の分解を再度使用可能にするには、マッピングの再調整が必要になる可能性があります。それに続いて、XSROBJECT に対して ALTER XSROBJECT ENABLE DECOMPOSITION ステートメントを実行します。 |
グローバル変数のデフォルトの式で参照される列の変更 | グローバル変数のデフォルトの式は変更処理中に妥当性検査されます。 デフォルトの式で使用されるユーザー定義関数を解決できない場合、操作は失敗します。 |
表がシステム期間テンポラル表である場合、関連した履歴表でも列が変更されます。 表がシステム期間テンポラル表である場合、ストリング・データ・タイプの列は、データ切り捨てが必要になる長さに変更することはできません。また、数値データ・タイプの列を変更するときには、それより精度が低いデータ・タイプにすることはできません (SQLSTATE 42837)。
変更対象の列に依存する行権限または列マスクが存在する場合、エラーが出されます (SQLSTATE 42917)。
表がシステム期間テンポラル表である場合、関連した履歴表でも列が変更されます。
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 の新規値です。変更対象の列に 依存する行権限または列マスクが存在する場合、エラーが戻されます (SQLSTATE 42917)。
表がシステム期間テンポラル表である場合、インライン長の変更は履歴表に伝搬されます。
generation-expression は、列マスクが定義されている列を参照できません (SQLSTATE 42621)。
表がシステム期間テンポラル表である場合、関連した履歴表でも列が変更されます。
IMPLICITLY HIDDEN は、表の列の中で非表示であるものを除いた最後の列に指定することはできません (SQLSTATE 428GU)。
この値は、この列に割り当て可能な任意の正または負の値にすることができます (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)。
DB2 pureScale 環境では、CACHE と ORDER の両方が指定されている場合、ORDER の指定が CACHE の指定をオーバーライドして、NO CACHE が有効になります。
列は、指定した表の中に存在していなければならず (SQLSTATE 42703)、 あらかじめ IDENTITY 属性で定義されていなければなりません (SQLSTATE 42837)。 RESTART は、START WITH の元の値を変更することはありません。
numeric-constant は数値定数で、小数点の右側に非ゼロの数字がない (SQLSTATE 428FA) かぎり、この列に割り当てることができる正または負の値にすることができます(SQLSTATE 42815)。 numeric-constant が列の次の値として使用されます。
generation-expression は、列マスクが定義されている列を参照できません (SQLSTATE 42621)。
システム期間テンポラル表の場合、行開始列の値は、トランザクション全体にわたり固有になるようにデータベース・マネージャーによって生成されます。 関連する履歴表に挿入される行の終了タイム・スタンプ値が開始タイム・スタンプ値より大きくなるように、 タイム・スタンプ値が調整される可能性があります (SQLSTATE 01695)。 これは、競合するトランザクションがシステム期間テンポラル表の同じ行を更新しているときに行われる場合があります。 このタイム・スタンプ値の調整を行うには、 データベース構成パラメーター systime_period_adj を Yes に設定する必要があります。 そのように設定されていないと、エラーが戻されます (SQLSTATE 57062)。単一の SQL トランザクション内で複数の行が挿入または更新され、調整が必要ではない場合、行開始列の値はすべての行において同じになり、別のトランザクションでその列のために生成された値とは異なる固有の値になります。 行開始列は期間 SYSTEM_TIME の開始列として必要になります。このタイプの生成列は、この使用目的で準備されています。
表に含めることができる行開始列は 1 つだけです (SQLSTATE 428C1)。 data-type が指定されない場合、 列は TIMESTAMP(12) として定義されます。data-type を指定する場合は、TIMESTAMP(12) でなければなりません (SQLSTATE 42842)。この場合、列は NOT NULL として定義される必要があります (SQLSTATE 42831)。行開始列は更新できません。
これを指定すると、行が挿入されるとき、または行内のいずれかの列が更新されるときには常に、データベース・マネージャーによって列のデータ・タイプの最大値が割り当てられます。
行終了列が期間 SYSTEM_TIME の 2 番目の列として必要になります。このタイプの生成列は、この使用目的で準備されています。
表に含めることができる行終了列は 1 つだけです (SQLSTATE 428C1)。 data-type が指定されない場合、 列は TIMESTAMP(12) として定義されます。data-type を指定する場合は、TIMESTAMP(12) でなければなりません (SQLSTATE 42842)。この場合、列は NOT NULL として定義される必要があります (SQLSTATE 42831)。行終了列は更新できません。
トランザクション開始 ID 列がシステム期間テンポラル表に必要になります。このタイプの生成列は、この使用目的で準備されています。
表に含めることができるトランザクション開始 ID 列は 1 つだけです (SQLSTATE 428C1)。 data-type が指定されない場合、 列は TIMESTAMP(12) として定義されます。data-type を指定する場合は、TIMESTAMP(12) でなければなりません。トランザクション開始 ID 列は更新できません。
表がシステム期間テンポラル表である場合、NOT NULL 属性は、関連した履歴表の対応する列からもドロップされます。
変更対象の列に依存する行権限または列マスクのいずれかが存在する場合、 エラーが出されます (SQLSTATE 42917)。
システム・デフォルト値がこのような方法で保管されると、 列上での挿入や更新操作の際に余分な検査が行われるために、若干パフォーマンスが低下します。
列の既存のデータは変更されません。 既存のデータを使用可能にして、 最小限のスペースを使用してシステム・デフォルト値を保管することの利点を生かすため、 オフラインでの表再編成を考慮してください。
基本データ・タイプは、DATE、TIME、または TIMESTAMP であってはなりません (SQLSTATE 42842)。 基本データ・タイプが可変長ストリングの場合には、この節は無視されます。 表が VALUE COMPRESSION に設定されている場合は、長さ 0 のストリング値は自動的に圧縮されます。
変更する表が型付き表である場合、 列をスーパー表から継承することはできません (SQLSTATE 428DJ)。
表に対する行レベルのアクセス制御をアクティブにします。 この表は、型付き表、カタログ表 (SQLSTATE 55019)、作成済み一時表、宣言済み一時表 (SQLSTATE 42995)、ニックネーム (SQLSTATE 42809)、ビュー (SQLSTATE 42809) にすることはできません。
デフォルトの行権限が暗黙的に作成され、この表の行に対するアクセスを禁止します。ただし、SECADM 権限を持つユーザーが明示的に作成した行権限によって許可される場合は例外です。
この表がデータ操作ステートメントで参照されるとき、その表に対して作成されたすべての有効な行権限 (デフォルトの行権限を含む) が DB2 データベースによって暗黙的に適用され、表の中でアクセス可能な行セットが制御されます。
この表にトリガーが存在する場合、トリガーは SECURED 属性で定義する必要があります (SQLSTATE 55019)。
ビューに関して、NOT SECURED 属性を指定して定義された INSTEAD OF トリガーが存在する場合、 そのビューの定義内で、この表を参照してはなりません (SQLSTATE 55019)。
この表をマテリアライズ照会表が参照している場合は、materizalized-query-definition の fullselect で参照される関数は、SECURED 属性を指定して定義されていなければなりません (SQLSTATE 55019)。
マテリアライズ照会表 (またはステージング表) が、行レベルのアクセス制御がアクティブになっている表に (ビューを介して直接的または間接的に) 依存し、そのマテリアライズ照会表 (またはステージング表) の行レベルのアクセス制御がまだアクティブになっていない場合、そのマテリアライズ照会表 (またはステージング表) の行レベルのアクセス制御が暗黙的にアクティブになります。 これにより、マテリアライズ照会表 (またはステージング表) の内容への直接アクセスが制限されます。 行に対するそのような行権限が定義される前に表を照会で明示的に参照すると、表にデータがないことを示す警告が返されます (SQLSTATE 02000)。 マテリアライズ照会表 (またはステージング表) にアクセスするには、適切な行権限を作成します。またはふさわしいようであれば、マテリアライズ照会表 (またはステージング表) に対する ALTER TABLE DEACTIVATE ROW ACCESS CONTROL ステートメントを発行して、行レベルの保護を除去します。
この表において行アクセス制御が既にアクティブとして定義されている場合、ACTIVATE ROW ACCESS CONTROL は無視されます。
表がシステム期間テンポラル表である場合、データベース・マネージャーは自動的に、履歴表での行アクセス制御をアクティブにし、デフォルトの行権限を履歴表に作成します。
表に対する列レベルのアクセス制御をアクティブにします。 この表は、型付き表、カタログ表 (SQLSTATE 55019)、作成済み一時表、宣言済み一時表 (SQLSTATE 42995)、ニックネーム (SQLSTATE 42809)、ビュー (SQLSTATE 42809) にすることはできません。
この表へのアクセスは制限されませんが、表がデータ操作ステートメントで参照されるとき、その表に対して作成されたすべての有効な列マスクがデータベース・マネージャーによって暗黙的に適用され、照会の最終結果表で参照される列について返される値がマスクされます。
この表にトリガーが存在する場合、トリガーは SECURED 属性で定義する必要があります (SQLSTATE 55019)。
この表をマテリアライズ照会表が参照している場合は、materizalized-query-definition の fullselect で参照される関数は、SECURED 属性を指定して定義されていなければなりません (SQLSTATE 55019)。
ビューに関して、NOT SECURED 属性を指定して定義された INSTEAD OF トリガーが存在する場合、 そのビューの定義内で、この表を参照してはなりません (SQLSTATE 55019)。 マテリアライズ照会表が、列レベルのアクセス制御がアクティブになっている表に (ビューを介して直接的または間接的に) 依存し、そのマテリアライズ照会表の行レベルのアクセス制御がまだアクティブになっていない場合、そのマテリアライズ照会表の行レベルのアクセス制御が暗黙的にアクティブになります。 これにより、マテリアライズ照会表の内容への直接アクセスが制限されます。 行に対するそのような行権限が定義される前に表を照会で明示的に参照すると、表にデータがないことを示す警告が返されます (SQLSTATE 02000)。 マテリアライズ照会表にアクセスするには、適切な行権限を作成します。またはふさわしいようであれば、マテリアライズ照会表に対する ALTER TABLE DEACTIVATE ROW ACCESS CONTROL ステートメントを発行して、行レベルの保護を除去します。
この表において列レベルのアクセス制御が既にアクティブとして定義されている場合、ACTIVATE COLUMN ACCESS CONTROL は無視されます。
表がシステム期間テンポラル表である場合、データベース・マネージャーは自動的に、履歴表での行アクセス制御をアクティブにし、デフォルトの行権限を履歴表に作成します。
表に対する行レベルのアクセス制御を非アクティブにします。 この表がデータ操作ステートメントで参照されるとき、その表に対して定義された既存の有効な行権限はデータベース・マネージャーによって適用されないため、表の中でアクセス可能な行セットは制御されません。
この表において行アクセス制御がアクティブになっていない場合、DEACTIVATE ROW ACCESS CONTROL は無視されます。
表に対する列レベルのアクセス制御を非アクティブにします。 この表がデータ操作ステートメントで参照されるとき、その表に対して定義された既存の有効な列マスクはデータベース・マネージャーによって適用されないため、照会の最終結果表で参照される列について返される値は制御されません。
この表において列アクセス制御がアクティブになっていない場合、DEACTIVATE COLUMN ACCESS CONTROL は無視されます。
表は履歴表として定義できません (SQLSTATE 42986)。 表がシステム期間テンポラル表である場合、関連した履歴表でも列が名前変更されます。
DROP COLUMN では、行権限または列マスクの定義で参照される列をドロップしてはなりません (SQLSTATE 42917)。 ただし、列マスクが定義された列はドロップできます。 列をドロップするとき、その列に対して定義された列マスクもドロップされます。
操作 | RESTRICT の効果 | CASCADE の効果 |
---|---|---|
ビューまたはトリガーによって参照される列をドロップする。 | 列のドロップは許可されません。 | そのオブジェクト自身とそのオブジェクトに従属するすべてのオブジェクトがドロップされます。 |
索引のキーで参照される列をドロップする。 | 索引で参照されているすべての列が、同じ ALTER TABLE ステートメントでドロップされていれば、索引のドロップが許可されます。 それ以外の場合は、列のドロップは許可されません。 | 索引がドロップされます。 |
ユニーク制約で参照されている列をドロップする。 | ユニーク制約で参照されているすべての列が、同じ ALTER TABLE ステートメントでドロップされていれば、また、ユニーク制約が参照制約によって参照されていなければ、列と制約がドロップされます。(制約を成立させるために使用されている索引もドロップされます) それ以外の場合は、列のドロップは許可されません。 | ユニーク制約と、そのユニーク制約を参照するあらゆる参照制約がドロップされます。 (これらの制約によって使用される索引もすべてドロップされます。) |
参照制約で参照されている列をドロップする。 | 参照制約で参照されているすべての列が、同じ ALTER TABLE ステートメントでドロップされていれば、列と制約がドロップされます。 それ以外の場合は、列のドロップは許可されません。 | 参照制約がドロップされます。 |
ドロップされないシステム生成列によって参照されている列をドロップする。 | 列のドロップは許可されません。 | 列のドロップは許可されません。 |
チェック制約で参照されている列をドロップする。 | 列のドロップは許可されません。 | チェック制約がドロップされます。 |
分解可能な XSROBJECT で参照されている列をドロップする。 | 列のドロップは許可されません。 | XSROBJECT が分解操作不能とマークされます。 XSROBJECT の分解を再度使用可能にするには、マッピングの再調整が必要になる可能性があります。それに続いて、XSROBJECT に対して ALTER XSROBJECT ENABLE DECOMPOSITION ステートメントを実行します。 |
グローバル変数のデフォルトの式で参照される列のドロップ | 列のドロップは許可されません。 | グローバル変数はドロップされます。 ただし、グローバル変数に依存する他のオブジェクト (カスケードを許可しないオブジェクト) があるためにグローバル変数のドロップが許可されなければ、ドロップされません。 |
行レベルのアクセス制御または列レベルのアクセス制御がこの表で有効である場合、この制御は、表がマテリアライズ照会表でなくなった後も残ります。
システム期間を SYSTEM_TIME という名前で定義します。 表に SYSTEM_TIME という名前の列があってはなりません (SQLSTATE 42711)。 表に含めることができる SYSTEM_TIME 期間は 1 つだけです (SQLSTATE 42711)。 begin-column-name は ROW BEGIN として定義する必要があり、end-column-name は ROW END として定義する必要があります (SQLSTATE 428HN)。
アプリケーション期間を BUSINESS_TIME という名前で定義します。 表に BUSINESS_TIME という名前の列があってはなりません (SQLSTATE 42711)。 表に含めることができる BUSINESS_TIME 期間は 1 つだけです (SQLSTATE 42711)。 begin-column-name および end-column-name は、両方とも DATE または TIMESTAMP(p) (p は 0 から 12) として定義する必要があり (SQLSTATE 42842)、列は NOT NULL として定義する必要があります (SQLSTATE 42831)。 begin-column-name および end-column-name は、GENERATED 節で定義された列を指定することはできません (SQLSTATE 428HZ)。 SET INTEGRITY ペンディング状態の表に、業務時間枠 (BUSINESS_TIME 期間) の列を追加することはできません。
end-column-name の値が begin-column-name の値より大きくなるように、暗黙的なチェック制約が生成されます。 暗黙的に作成されるチェック制約の名前は DB2_GENERATED_CHECK_CONSTRAINT_FOR_BUSINESS_TIME で、既存のチェック制約の名前にすることはできません (SQLSTATE 42710)。
BUSINESS_TIME 期間がドロップされると、その表に対するアプリケーション期間テンポラル表に従属するタイプを持つパッケージはすべて無効になります。その表への従属関係が記録されているビューやトリガーなど、その他の従属オブジェクトも無効としてマークが付けられます。
表が型付き表である場合、 このオプションはサポートされません (ルート表の場合は 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 を設定した後に表の再編成が必要となります。 これは、使用可能なフリー・スペース情報が不正確となるため、 データ挿入時のパフォーマンスの低下につながるからです。
前述の 2 つのオプションのいずれも COMPRESS YES 節に指定しない場合は、ADAPTIVE が暗黙的に使用されます。
starting-clause が省略されると、新規のデータ・パーティションは、表の末尾に入るものと想定されます。 ending-clause が省略されると、新規のデータ・パーティションは、表の先頭に入るものと想定されます。
新規の索引パーティションで使用される表スペースは、デフォルトであっても INDEX IN 節で指定されていても、他のすべての索引パーティションで使用される表スペースのタイプ (SMS または DMS)、ページ・サイズ、およびエクステント・サイズと一致していなければなりません (SQLSTATE 42838)。
パーティション表で LONG IN 節の使用を制御する規則については、『パーティション表でのラージ・オブジェクトの動作』を参照してください。
アタッチされる表で、行レベルのアクセス制御または列レベルのアクセス制御のいずれかがアクティブになっている場合、アタッチ先の表の同じ制御をアクティブにする必要があります。 行権限や列マスクは、アタッチされる表からターゲット表に自動的に引き継がれるわけではありません。 列マスクおよび行権限は、必ずしも両方の表で厳密に同じである必要はありません。ただし、セキュリティーの観点では、同じであるのが最善です。 しかし、アタッチされる表の行レベルのアクセス制御がアクティブになっている場合には、アタッチ先の表でも行レベルのアクセス制御をアクティブにする必要があります (SQLSTATE 428GE)。 同様に、アタッチする表の列レベルのアクセス制御がアクティブになっており、 少なくとも 1 つの列マスク・オブジェクトが使用可能になっている場合には、 アタッチ先の表でも列レベルのアクセス制御をアクティブにし、 対応する列の列マスク・オブジェクトを使用可能にする必要があります (SQLSTATE 428GE)。
starting-clause が省略されると、新規のデータ・パーティションは、表の末尾に入るものと想定されます。 ending-clause が省略されると、新規のデータ・パーティションは、表の先頭に入るものと想定されます。
行レベルのアクセス制御または列レベルのアクセス制御のいずれかが定義されている表からパーティションがデタッチされる場合、デタッチされるデータに関して作成される新しい表では、自動的に行レベルのアクセス制御がアクティブになり (列レベルのアクセス制御はアクティブになりません)、デタッチされたデータが保護されます。 この新しい表に対して適切な行権限を定義するか、表の行レベルのアクセス制御を非アクティブにするまで、この表に直接アクセスしても行は返されません。
この表の行の履歴バージョンは、データベース・マネージャーによって保持されます。 データベース・マネージャーは、行が表に挿入された時期とそれが更新または削除された時期を示す追加情報を記録します。 システム期間テンポラル表の行が更新されると、その行の直前のバージョンが保持されます。 システム期間テンポラル表のデータが削除されると、その行の古いバージョンが履歴レコードとして挿入されます。 表の履歴行を格納するために、関連付けられた履歴表が使用されます。
この表に対する参照には、データのどのシステム・バージョンを返すかを示す期間検索条件を含めることができます。
history-table-name は、システム期間テンポラル表の履歴行を保持する履歴表を指定します。 history-table-name は、現行サーバーに存在する表を指定するものでなければならず (SQLSTATE 42704)、 カタログ表ではなく (SQLSTATE 42832)、既存のシステム期間テンポラル表、既存の履歴表、宣言済みのグローバル一時表、作成済みのグローバル一時表、マテリアライズ照会表、ビューのいずれでもありません (SQLSTATE 428HX)。指定する履歴表に、ID 列、行変更タイム・スタンプ列、行開始列、 行終了列、トランザクション開始 ID 列、生成式列が含まれていたり、 期間が含まれていてはなりません (SQLSTATE 428HX)。
行アクセス制御または列アクセス制御がシステム期間テンポラル表においてアクティブであるが、行アクセス制御が履歴表でアクティブでない場合、データベース・マネージャーは自動的に、履歴表での行アクセス制御をアクティブにし、デフォルトの行権限を履歴表に作成します。
DROP VERSIONING を指定して表を変更すると、その表におけるシステム期間テンポラル表に従属するタイプのパッケージはすべて無効になります。その表への従属関係が記録されているビューやトリガーなど、その他の従属オブジェクトも無効としてマークが付けられます。
属性を変更したログ・レコードをキャプチャー・プログラムが処理する前に、 変更データ表を変更していなければ、キャプチャー・プログラムが失敗する場合があります。 コピーを保持しているサブスクリプションを実行する前に、 変更対象の列が含まれるコピーを変更していなければ、 そのサブスクリプションは失敗する可能性があります。
アタッチされたパーティションをオンラインにするには、ターゲット表に対して 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 などの従属オブジェクトが他に存在しないとすれば、新たにデタッチされた表へのアクセスが同一作業単位内で可能です。 ブロック索引を含めすべてのパーティション索引は、再作成の必要なくターゲット表の索引になります。
表の一部の列を暗黙的な非表示列に変更すると、表で作動しているデータ移動ユーティリティーの動作に影響を与える可能性があります。 表に暗黙的な非表示列が含まれる場合、IMPORT、INGEST、LOAD などのユーティリティーでは、非表示列のデータを対象の操作に含めるかどうかをユーザーが指定する必要があります。 これにより、例えば、表が変更される前には正常に実行できたロード操作で、障害が発生する可能性があります (SQLCODE SQL2437N)。 同様に、EXPORT の場合も、非表示列のデータを操作に含めるかどうかをユーザーが指定する必要があります。
データ移動ユーティリティーでは、暗黙的な非表示列が含まれる表を作業対象とする場合、DB2_DMU_DEFAULT レジストリー変数、implicitlyhiddeninclude ファイル・タイプ修飾子、implicitlyhiddenmissing ファイル・タイプ修飾子のいずれかを使用しなければなりません。
この表がデータ操作ステートメントで参照されるとき、その表に対して作成されたすべての有効な行権限 (デフォルトの行権限を含む) がデータベース・マネージャーによって暗黙的に適用され、表の中でアクセス可能な行が制御されます。 行アクセス制御の検索条件は、それぞれの使用可能な行権限にある検索条件に論理 OR 演算子を適用することによって得られます。 この得られた検索条件は、述部、グループ化、順序付けなどのユーザー指定の操作が処理される前に、この表のフィルターとして作動します。 この得られた検索条件は、権限定義で指定した許可 ID でこの表の特定の行にアクセスすることを許可します。
ACTIVATE ROW ACCESS CONTROL 節を使用すると、 この表を参照するすべてのパッケージおよび動的キャッシュ・ステートメントは無効になります。
行アクセス制御は、DEACTIVATE ROW ACCESS CONTROL 節を使用してその強制適用を停止するまでは強制適用されます。
デフォルトの行アクセス権の所有者は SYSIBM です。 デフォルトの行権限は、常に使用可能になっています。 デフォルトの行権限は、行アクセス制御が非アクティブになるか、表がドロップされるときにドロップされます。
列マスクを使用して列値をマスクする場合、それらのマスクによって最終結果表の値が決まります。 列に列マスクがあり、その列が最外部の選択リストに出現する場合 (具体的には、 列名、または式に組み込まれている列の単純参照)、その列マスクが列に適用されて、最終結果表の値が生成されます。 その列が最外部の選択リストに出現しないものの、最終結果表に関与する場合 (例えばそれがマテリアライズ表の式またはビューに出現する場合)、マテリアライズ表の式またはビューの結果表にマスクされた値が組み込まれてそれを最終結果表で使用できるように、列マスクが列に適用されます。
列マスクの適用は、そのステートメント内の他の節 (WHERE、GROUP BY、HAVING、SELECT DISTINCT、ORDER BY など) の操作に干渉することはありません。 最終結果表に返される行は、結果行に含まれている値が列マスクによってマスクされた可能性があるという点を除けば、違いはありません。 そのため、マスクされた列が ORDER BY ソート・キーにも出現する場合、順序は元の列値に基づくものとなり、最終結果表でマスクされた値にその順序が反映されない可能性があります。 同様に、マスクされた値は、SELECT DISTINCT によって強制適用される固有性が反映されない可能性があります。
表の列アクセス制御の強制適用を停止するために、DEACTIVATE COLUMN ACCESS CONTROL 節が使用されます。 その後この表がデータ操作ステートメントで参照されるとき、列マスクは適用されません。
明示的に作成された行権限または列マスクがある場合、それらはそのまま残りますが、作用しません。
表を参照するすべてのパッケージおよび動的キャッシュ・ステートメントは、行または列のアクセス制御が非アクティブになると無効になります。
アプリケーション期間のテンポラル表に対してデータ変更操作を行うと、行が更新または削除されるときに、1、2 行の追加行が自動的に挿入される場合があります。 アプリケーション期間のテンポラル表のある行で示される期間の一部分に対して行の更新または削除を指定すると、その行は更新または削除され、その行の変更されない部分を示す行が 1、2 行が自動的に挿入されます。 表に対する更新操作または削除操作の結果として自動的に挿入される行ごとに、アプリケーション期間のテンポラル表に対して生成される各列に新規の値が生成されます。 生成される列がユニーク・キー、主キー、参照制約の親キー、またはユニーク索引の一部として定義される場合、自動挿入によって制約または索引に違反する可能性があり、その場合にはエラーが返されます。
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
CREATE TABLE tt1
(c1 INT SECURED WITH C, c2 DB2SECURITYLABEL) SECURITY POLICY P;
CREATE TABLE tt2
(c3 INT SECURED WITH B, c4 DB2SECURITYLABEL) SECURITY POLICY P;
以下の SQL を使用して、表 tt2 をマテリアライズ照会表に変更することができます。
ALTER TABLE tt2 ADD (SELECT * FROM tt1 WHERE c1 > 10)
DATA INITIALLY DEFERRED REFRESH DEFERRED;
表 tt2 はセキュア・ポリシー P を持つマテリアライズ照会表になります。tt2.c3 のセキュリティー・ラベルは P.B です。tt2.c4 のセキュリティー・ラベルは P.C で、DB2SECURITYLABEL でもあります。