ALTER TABLE ステートメント

ALTER TABLE ステートメントは、表の定義を変更します。

呼び出し

このステートメントはアプリケーション・プログラムに組み込んだり、動的 SQL ステートメントを使用して発行することができます。 これは、DYNAMICRULES の実行動作がパッケージに効力を持つ場合にのみ、動的に準備できる実行可能ステートメントです (SQLSTATE 42509)。

許可

ステートメントの許可 ID によって保持されている特権には、少なくとも以下のいずれかの権限が含まれていなければなりません。
  • 変更する表に対する ALTER 特権
  • 変更する表に対する CONTROL 特権
  • 表のスキーマに対する ALTERIN 特権
  • 表のスキーマに対する SCHEMAADM 権限
  • DBADM 権限
外部キーを作成またはドロップするには、このステートメントの許可 ID に、親表に対する以下のいずれかの権限が含まれている必要があります。
  • 表に対する REFERENCES 特権
  • 指定された親キーのそれぞれの列に対する REFERENCES 特権
  • 表に対する CONTROL 特権
  • 表のスキーマに対する SCHEMAADM 権限
  • DBADM 権限
表 T の主キーまたはユニーク制約をドロップするには、ステートメントの許可 ID の特権に、表 T の親キーに従属しているすべての表に対する以下の権限が少なくとも 1 つ含まれている必要があります。
  • 表に対する ALTER 特権
  • 表に対する CONTROL 特権
  • 表のスキーマに対する ALTERIN 特権
  • 表のスキーマに対する SCHEMAADM 権限
  • DBADM 権限
(全選択を使用して) 表をマテリアライズ照会表に変更するには、 このステートメントの許可 ID によって保持されている特権に、以下の権限のうち少なくとも 1 つが含まれている必要があります。
  • 表に対する CONTROL 特権
  • 表のスキーマに対する SCHEMAADM 権限
  • DBADM 権限
さらに、全選択で識別された個々の表またはビューに対する 以下の権限 (グループ特権を除く) が少なくとも 1 つ含まれている必要があります。
  • 以下のすべて:
    • 表またはビューに対する SELECT 特権または表またはビューのスキーマに対する SELECTIN 特権
    • 表またはビューに対する ALTER 特権や表またはビューのスキーマに対する ALTERIN 特権 (グループ特権を含む)
  • 表またはビューに対する CONTROL 特権
  • 表またはビューのスキーマに対する DATAACCESS
  • データベースに対する DATAACCESS 権限
表を変更してマテリアライズ照会表でなくなるようにするには、ステートメントの許可 ID の特権に、マテリアライズ照会表の定義に使用された全選択で指定されたすべての表またはビューに対する以下の権限が少なくとも 1 つ含まれている必要があります。
  • 表またはビューに対する ALTER 特権
  • 表またはビューに対する CONTROL 特権
  • 表またはビューのスキーマに対する ALTERIN 特権
  • 表のスキーマに対する SCHEMAADM 権限
  • DBADM 権限

タイプ DB2SECURITYLABEL の列を表に追加するには、ステートメントの許可 ID の特権に、少なくとも、表に関連付けられているセキュリティー・ポリシーのセキュリティー・ラベルが含まれている必要があります。

表からセキュリティー・ポリシーを削除するには、ステートメントの許可 ID の保持する特権に、SECADM 権限が含まれている必要があります。

データ・パーティションをアタッチするように表を変更する場合は、ステートメントの許可 ID の特権に、ソース表に対する以下の権限も、少なくとも 1 つ含まれている必要があります。
  • 表に対する SELECT 特権またはソース表を含むスキーマに対する SELECTIN 特権、および表のスキーマに対する DROPIN 特権
  • 表に対する CONTROL 特権
  • 表のスキーマに対する DATAACCESS 権限
  • データベースに対する DATAACCESS 権限
また、ターゲット表に対しては、以下の権限のうち少なくとも 1 つが含まれている必要があります。
  • 以下のすべて:
    • 表に対する ALTER 特権または表のスキーマに対する ALTERIN 特権
    • 表に対する INSERT 特権または表のスキーマに対する INSERTIN 特権
  • 表に対する CONTROL 特権
  • 表のスキーマに対する DATAACCESS 権限
  • データベースに対する DATAACCESS 権限
データ・パーティションをデタッチするように表を変更する場合は、ステートメントの許可 ID の特権に、デタッチされるパーティションのターゲット表に対する以下の権限も、少なくとも 1 つ含まれている必要があります。
  • データベースに対する CREATETAB 権限、および表で使用する表スペースに対する USE 特権と、以下のいずれかが必要です。
    • データベースに対する IMPLICIT_SCHEMA 権限 (新規表の暗黙的または明示的スキーマ名が存在しない場合)
    • スキーマに対する CREATEIN 特権 (新規表のスキーマ名が既存のスキーマを指している場合)
    • 表のスキーマに対する SCHEMAADM 権限と、表が使用する表スペースに対する USE 特権
  • DBADM 権限
また、ソース表に対しては、以下の権限のうち少なくとも 1 つが含まれている必要があります。
  • 以下のすべて:
    • 表に対する SELECT 特権または表のスキーマに対する SELECTIN 特権
    • 表に対する ALTER 特権または表のスキーマに対する ALTERIN 特権
    • 表に対する DELETE 特権または表のスキーマに対する DELETEIN 特権
  • 表に対する CONTROL 特権
  • 表のスキーマに対する DATAACCESS 権限
  • データベースに対する DATAACCESS 権限
表を NOT LOGGED INITIALLY WITH EMPTY TABLE をアクティブ化するように変更する場合は、ステートメントの許可 ID に、以下の権限が少なくとも 1 つ含まれている必要があります。
  • 以下のすべて:
    • 表に対する ALTER 特権または表のスキーマに対する ALTERIN 特権
    • 表に対する DELETE 特権または表のスキーマに対する DELETEIN 特権
  • 表に対する CONTROL 特権
  • 表のスキーマに対する SCHEMAADM 権限
  • DBADM 権限
セキュリティー・ポリシーで保護されている表を NOT LOGGED INITIALLY WITH EMPTY TABLE をアクティブ化するように変更する場合は、ステートメントの許可 ID に、以下の権限が少なくとも 1 つ含まれている必要があります。
  • 表に対する CONTROL 特権
  • 表のスキーマに対する SCHEMAADM 権限
  • DBADM 権限

行と列のアクセス制御を ACTIVATE および DEACTIVATE するように表を変更する場合は、ステートメントの許可 ID が持つ特権に、SECADM 権限が含まれている必要があります。

行アクセス制御がアクティブになっている表を、ACTIVATE NOT LOGGED INITIALLY WITH EMPTY TABLE を指定して変更する場合は、ステートメントの許可 ID の保持する特権に、以下の権限が少なくとも 1 つ含まれている必要があります。
  • 表に対する CONTROL 特権
  • 表のスキーマに対する SCHEMAADM 権限
  • DBADM 権限
システム期間テンポラル表を変更する場合は、ステートメントの許可 ID に次のいずれかの権限が必要です。
  • 履歴表に対する ALTER 特権
  • 履歴表に対する CONTROL 特権
  • 履歴表のスキーマに対する ALTERIN 特権
  • 履歴表のスキーマに対する SCHEMAADM 権限
  • DBADM 権限
この条件は、表がシステム期間テンポラル表になるような変更を加える場合 (ADD VERSIONING 節を使用する) に適用されます。 また、システム期間テンポラル表を変更する際に、1 つ以上の変更によって、関連付けられている履歴表に変更が生じる場合にも適用されます。

構文

Read syntax diagramSkip visual syntax diagramALTER TABLEtable-name1ADDCOLUMNcolumn-definitionunique-constraintreferential-constraintcheck-constraintdistribution-clauseRESTRICT ON DROPADDMATERIALIZEDQUERYmaterialized-query-definitionALTERFOREIGN KEYCHECKconstraint-nameconstraint-alterationALTERCOLUMNcolumn-alterationACTIVATEDEACTIVATEROW ACCESS CONTROL2ACTIVATEDEACTIVATECOLUMN ACCESS CONTROL3RENAME COLUMNsource-column-nameTOtarget-column-nameDROPPRIMARY KEYFOREIGN KEYUNIQUECHECKCONSTRAINTconstraint-nameCOLUMNcolumn-nameCASCADERESTRICTRESTRICT ON DROPDROP DISTRIBUTIONDROPMATERIALIZEDQUERYADD PERIODperiod-definitionDROP PERIODperiod-nameDATA CAPTURENONECHANGESINCLUDE LONGVAR COLUMNSACTIVATE NOT LOGGED INITIALLYWITH EMPTY TABLEPCTFREEintegerLOCKSIZEROWBLOCKINSERTTABLEAPPENDONOFFVOLATILENOT VOLATILECARDINALITYCOMPRESSYESADAPTIVESTATICNOACTIVATEDEACTIVATEVALUE COMPRESSIONLOG INDEX BUILDNULLOFFONADD PARTITIONadd-partitionATTACH PARTITIONattach-partitionDETACH PARTITIONpartition-nameINTOtable-name1ADD SECURITY POLICYpolicy-nameDROP SECURITY POLICYADD VERSIONINGUSE HISTORY TABLEhistory-table-nameDROP VERSIONING
add-partition
Read syntax diagramSkip visual syntax diagrampartition-nameboundary-spec INtablespace-name INDEX INtablespace-nameLONG INtablespace-name
boundary-spec
Read syntax diagramSkip visual syntax diagramstarting-clauseending-clauseending-clause
starting-clause
Read syntax diagramSkip visual syntax diagramSTARTINGFROM (,constantMINVALUEMAXVALUE)constantMINVALUEMAXVALUEINCLUSIVEEXCLUSIVE
ending-clause
Read syntax diagramSkip visual syntax diagramENDINGAT(,constantMINVALUEMAXVALUE)constantMINVALUEMAXVALUEINCLUSIVEEXCLUSIVE
attach-partition
Read syntax diagramSkip visual syntax diagrampartition-nameboundary-specFROMtable-nameBUILD MISSING INDEXESREQUIRE MATCHING INDEXES
column-definition
Read syntax diagramSkip visual syntax diagramcolumn-namedata-type4column-options
column-options
Read syntax diagramSkip visual syntax diagramNOT NULLlob-options5SCOPEtyped-table-name2typed-view-name26CONSTRAINTconstraint-nameUNIQUEPRIMARY KEYreferences-clauseCHECK(check-condition)constraint-attributes7default-clausegenerated-clauseCOMPRESS SYSTEM DEFAULTCOLUMNSECURED WITHsecurity-label-nameNOT HIDDENIMPLICITLY HIDDEN
lob-options
Read syntax diagramSkip visual syntax diagram LOGGEDNOT LOGGED NOT COMPACTCOMPACT
references-clause
Read syntax diagramSkip visual syntax diagramREFERENCES parent-table-namenickname (,column-name)rule-clauseconstraint-attributes
rule-clause
Read syntax diagramSkip visual syntax diagram ON DELETE NO ACTIONON DELETERESTRICTCASCADESET NULL ON UPDATE NO ACTIONON UPDATE RESTRICT
Constraint-attributes
Read syntax diagramSkip visual syntax diagram ENFORCEDNOT ENFORCEDTRUSTEDNOT TRUSTED ENABLE QUERY OPTIMIZATIONDISABLE QUERY OPTIMIZATION
default-clause
Read syntax diagramSkip visual syntax diagramWITHDEFAULT constantdatetime-special-registeruser-special-registerCURRENT SCHEMACURRENT MEMBERNULLcast-function(constantdatetime-special-registeruser-special-registerCURRENT SCHEMA)EMPTY_CLOB()EMPTY_DBCLOB()EMPTY_BLOB()
generated-clause
Read syntax diagramSkip visual syntax diagramGENERATEDALWAYSBY DEFAULTas-row-change-timestamp-clauseGENERATEDALWAYSas-generated-expression-clauseas-row-transaction-timestamp-clauseas-row-transaction-start-id-clause
as-row-change-timestamp-clause
Read syntax diagramSkip visual syntax diagram8 FOR EACH ROW ON UPDATE AS ROW CHANGE TIMESTAMP
as-generated-expression-clause
Read syntax diagramSkip visual syntax diagramAS(generation-expression )
as-row-transaction-timestamp-clause
Read syntax diagramSkip visual syntax diagramASROW BEGINEND
as-row-transaction-start-id-clause
Read syntax diagramSkip visual syntax diagramASTRANSACTION START ID
unique-constraint
Read syntax diagramSkip visual syntax diagramCONSTRAINTconstraint-nameUNIQUEPRIMARY KEY( ,column-name ,BUSINESS_TIMEWITHOUT OVERLAPS )constraint-attributes
referential-constraint
Read syntax diagramSkip visual syntax diagramCONSTRAINTconstraint-nameFOREIGN KEY( ,column-name )references-clause
check-constraint
Read syntax diagramSkip visual syntax diagramCONSTRAINTconstraint-nameCHECK(check-condition )constraint-attributes
check-condition
Read syntax diagramSkip visual syntax diagramsearch-conditionfunctional-dependency
functional-dependency
Read syntax diagramSkip visual syntax diagram column-name(,column-name) DETERMINED BY column-name(,column-name)
distribution-clause
Read syntax diagramSkip visual syntax diagramDISTRIBUTE BYHASH ( ,column-name )
materialized-query-definition
Read syntax diagramSkip visual syntax diagram(fullselect)refreshable-table-options
refreshable-table-options
Read syntax diagramSkip visual syntax diagramDATA INITIALLY DEFERREDREFRESH DEFERREDIMMEDIATE ENABLE QUERY OPTIMIZATIONDISABLE QUERY OPTIMIZATIONMAINTAINED BY SYSTEMMAINTAINED BYUSERREPLICATIONFEDERATED_TOOL
constraint-alteration
Read syntax diagramSkip visual syntax diagram9ENABLEDISABLEQUERY OPTIMIZATIONENFORCEDNOT ENFORCEDTRUSTEDNOT TRUSTED
column-alteration
Read syntax diagramSkip visual syntax diagramcolumn-name SETDATA TYPEaltered-data-typeNOT NULLINLINE LENGTHintegerdefault-clauseEXPRESSIONas-generated-expression-clauseNOT HIDDENIMPLICITLY HIDDENSETgeneration-alterationSETgeneration-alterationidentity-alterationSETgeneration-attributeas-identity-clauseSET GENERATEDALWAYSas-generated-expression-clauseas-row-transacton-start-id-clauseas-row-transaction-timestamp-clauseDROPDEFAULTGENERATEDNOT NULLADD SCOPEtyped-table-nametyped-view-nameCOMPRESSSYSTEM DEFAULTOFFSECURED WITHsecurity-label-nameDROP COLUMN SECURITY
altered-data-type
Read syntax diagramSkip visual syntax diagrambuilt-in-typedistinct-type-name10
built-in-type
Read syntax diagramSkip visual syntax diagramINTEGERINTBIGINTDECIMALDECNUMERICNUM(5,0)( integer,0, integer)FLOAT(53)( integer)REALDOUBLEPRECISIONDECFLOAT(34)(16)CHARACTERCHAR(1)( integerOCTETSCODEUNITS32)VARCHARCHARACTERCHARVARYING( integerOCTETSCODEUNITS32)FOR BIT DATA11CLOBCHARACTERCHARLARGE OBJECT(1M)( integerKMGOCTETSCODEUNITS32)GRAPHIC(1)( integerCODEUNITS16CODEUNITS32)VARGRAPHIC( integerCODEUNITS16CODEUNITS32)DBCLOB(1M)( integerKMGCODEUNITS16CODEUNITS32)BINARY(1)( integer)VARBINARYBINARY VARYING(integer)BLOBBINARY LARGE OBJECT(1M)( integerKMG)BOOLEAN
as-identity-clause
Read syntax diagramSkip visual syntax diagramAS IDENTITY(9START WITH1numeric-constantINCREMENT BY1numeric-constantNO MINVALUEMINVALUEnumeric-constantNO MAXVALUEMAXVALUEnumeric-constantNO CYCLECYCLECACHE 20NO CACHECACHEinteger-constant)
generation-alteration
Read syntax diagramSkip visual syntax diagramSET GENERATED ALWAYSBY DEFAULT
identity-alteration
Read syntax diagramSkip visual syntax diagram9SET INCREMENT BYnumeric-constantSETNO MINVALUEMINVALUEnumeric-constantSETNO MAXVALUEMAXVALUEnumeric-constantSETNO CYCLECYCLESETNO CACHECACHEinteger-constantSETNO ORDERORDERRESTARTWITHnumeric-constant
generation-attribute
Read syntax diagramSkip visual syntax diagramGENERATED ALWAYSBY DEFAULT
period-definition
Read syntax diagramSkip visual syntax diagram SYSTEM_TIMEBUSINESS_TIME (begin-column-name,end-column-name )
Notes:
  • 1 The same clause must not be specified more than once (SQLSTATE 42614).
  • 2 If an ACTIVATE or DEACTIVATE clause is specified for row access control, no other clause except ACTIVATE or DEACTIVATE column access control can be specified in the same ALTER TABLE statement (SQLSTATE 42613).
  • 3 If an ACTIVATE or DEACTIVATE clause is specified for column access control, no other clause except ACTIVATE or DEACTIVATE row access control can be specified in the same ALTER TABLE statement (SQLSTATE 42613).
  • 4 If the first column option chosen is generated-clause, data-type can be omitted; it is computed by the generation expression.
  • 5 The lob-options clause applies to large object types (CLOB, DBCLOB, and BLOB), and to distinct types that are based on large object types only.
  • 6 The SCOPE clause applies to the REF type only.
  • 7 The default-clause and generated-clause cannot both be specified for the same column definition (SQLSTATE 42614).
  • 8 Data type is optional for a row change timestamp column if the first column-option specified is a generated-clause. The data type default is TIMESTAMP(6). Data type is optional for row-begin, row-end, and transaction-start-ID columns if the first column-option is a generated-clause; the data type default is TIMESTAMP(12).
  • 9 The same clause must not be specified more than once.
  • 10 The specified distinct type cannot have any data type constraints and the source type cannot be an anchored data type (SQLSTATE 428H2).
  • 11 The FOR BIT DATA clause can be specified in any order with the other column constraints that follow. The FOR BIT DATA clause cannot be specified with string units CODEUNITS32 (SQLSTATE 42613).

説明

table-name
table-name は、現行サーバーに存在する表を示していなければなりません。 これはニックネームであってはならず (SQLSTATE 42809)、 ビュー、カタログ表、作成済み一時表、または宣言済み一時表であってもなりません (SQLSTATE 42995)。

table-name でマテリアライズ照会表を指定した場合、 変更によって行えるのは、マテリアライズ照会の追加またはドロップ、 ACTIVATING NOT LOGGED INITIALLY 節の開始、 RESTRICT ON DROP の追加またはドロップ、 DATA CAPTURE、PCTFREE、LOCKSIZE、APPEND、VOLATILE、DATA ROW COMPRESSION、VALUE COMPRESSION の変更、 および行と列のアクセス制御のアクティブ化または非アクティブ化のみです。

table-name でシャドー表を指定する場合は、マテリアライズ照会表でサポートされる変更に加えて、主キーの追加またはドロップを変更に含めることができます。

table-name が、範囲がクラスター化された表を示している場合、 変更によって行えるのは、制約の追加・変更・ドロップ、NOT LOGGED INITIALLY の アクティブ化、 RESTRICT ON DROP の追加またはドロップ、locksize、data capture、または volatile の変更、および列のデ フォルト値の設定だけです。

ADD 列定義
列を表に追加します。
以下の表に列を追加することはできません。
  • システム期間テンポラル表の履歴表 (SQLSTATE 428HZ)
  • 型付き表 (SQLSTATE 428DH)
  • コンプレッション・ディクショナリーを非同期バックグラウンド操作で作成する表 (SQL20054N)
表のすべての既存の行で、新しい列の値はデフォルト値に設定されます。 新しい列はその表の最後の列になります。 つまり、最初に n 個の列が存在した場合、 追加された列は n+1 番目の列になります。

新しい列の追加によってすべての列のバイト総数が最大レコード・サイズを超えてはなりません。

表がカラム・オーガナイズ表である場合、LOB 列は既存の表に追加できません。

注: この制限は、 Db2®バージョン 11.5.1 以降削除されました。

表がシステム期間テンポラル表である場合、関連した履歴表にも列が追加されます。

追加される列が、式に基づく生成列である場合、列マスクが定義されている列をその式で参照することはできません (SQLSTATE 42621)。

マスクまたは権限が定義されている表、あるいはマスクまたは権限の定義で参照されている表に列を追加する場合、そのマスクまたは権限は無効になります。 列アクセス制御がアクティブになっていて無効なマスクが定義されている表へのアクセスは、無効なマスクを無効化、ドロップ、または再作成するまでブロックされます (SQLSTATE 560D0)。 行アクセス制御がアクティブになっていて無効な行権限が定義されている表へのアクセスは、無効な権限を無効化、ドロップ、または再作成するまでブロックされます (SQLSTATE 560D0)。

column-name
表に追加する列の名前です。 名前は非修飾でなければなりません。 表に既にある列名または期間名は使用できません (SQLSTATE 42711)。
data-type
CREATE TABLE にリストされているデータ・タイプのいずれかです。
NOT NULL
列に NULL 値が入るのを防止します。 default-clause (DEFAULT 節) も指定する必要があります (SQLSTATE 42601)。
lob-options
LOB データ・タイプのオプションを指定します。 CREATE TABLElob-options を参照してください。
SCOPE
参照タイプ列の有効範囲を指定します。
typed-table-name2
型付き表の名前。 column-name のデータ・タイプは REF(S) でなければなりません。 Styped-table-name2 のタイプを表します (SQLSTATE 428DM)。 column-name のデフォルト値が typed-table-name2 の既存行を参照しているか確認する検査は行われません。
typed-view-name2
型付きビューの名前。 column-name のデータ・タイプは REF(S) でなければなりません。 Styped-view-name2 のタイプを表します (SQLSTATE 428DM)。 column-name のデフォルト値が typed-view-name2 の既存行を参照しているか確認する検査は行われません。
CONSTRAINT 制約名
制約の名前を指定します。 制約名 (constraint-name) は、 同じ ALTER TABLE ステートメントに既に指定されている制約、 あるいは表に既存の他の制約の名前であってはなりません (SQLSTATE 42710)。

ユーザーが制約名を指定しない場合は、表に定義されている既存の制約の ID の中でユニークな 18 バイトの長さの ID がシステムによって生成されます。 (ID は、"SQL" と、タイム・スタンプに基づいて生成される一連の 15 の数字から構成されます。)

PRIMARY KEY または UNIQUE 制約と共に使用する場合:
  • constraint-name は、制約をサポートするために作成される索引の名前として使用できます。 ユニーク制約に関連付けられた索引名について詳しくは、 を参照してください。
  • 該当する場合は、キー索引の RANDOM 列で定義されている既存の索引を使用できます。 主制約またはユニーク制約を満たすことができる索引が複数ある場合は、選択される索引を予測できません。 既存の主キー索引またはユニーク・キー索引を、ランダム順の索引に変更することはできません。 ランダム順の主キー索引またはユニーク・キー索引が必要な場合は、まず、適切な索引を RANDOM キーワードで定義する必要があります。 次に、表を変更して、主キーまたはユニーク・キーを追加する必要があります。
PRIMARY KEY
1 つの列からなる主キーを定義する簡単な方法です。 つまり、PRIMARY KEY が列 C の定義で指定されている場合、 その効果は、PRIMARY KEY(C) 節が独立した節として指定された場合と同じです。 列に NULL 値を含めることはできないので、 NOT NULL 属性も指定する必要があります (SQLSTATE 42831)。

unique-constraint の説明の中の PRIMARY KEY を参照してください。

UNIQUE
1 つの列からなるユニーク・キーを定義する簡単な方法です。 すなわち、UNIQUE を列 C の定義に指定すると、 UNIQUE(C) 節を独立した節として指定した場合と同じ結果になります。

unique-constraint の説明の中の UNIQUE を参照してください。

references-clause
1 つの列からなる外部キーを定義する簡単な方法です。 つまり、references-clause が列 C の定義に指定されている場合、 その効果は、 列として C しか指定されていない FOREIGN KEY 節の一部として references-clause が指定された場合と同じになります。

CREATE TABLEreferences-clause を参照してください。

rule-clause
CREATE TABLErule-clause を参照してください。
CHECK (チェック条件)
1 つの列に適用されるチェック制約を定義する簡単な方法です。 CREATE TABLEcheck-condition を参照してください。
constraint-attributes
CREATE TABLEconstraint-attributes を参照してください。
デフォルト節
列のデフォルト値を指定します。
WITH
オプション・キーワード。
DEFAULT
INSERT で値が指定されなかった場合、あるいは INSERT または UPDATE で値として DEFAULT が指定された場合のためのデフォルト値を指定します。 DEFAULT キーワードの後に特定のデフォルト値が指定されていない場合、デフォルト値は、 表 1に示すように列のデータ・タイプによって異なります。 列が XML または構造化タイプとして定義されている場合、 DEFAULT 節を指定することはできません。

列が特殊タイプを使用して定義される場合、列のデフォルト値は、特殊タイプにキャストされたソース・データ・タイプのデフォルト値になります。

表 1. デフォルト値 (値が指定されない場合)
データ・タイプ デフォルト値
Numeric 0
固定長文字ストリング ブランクのストリング
可変長文字ストリング 長さ 0 のストリング
固定長グラフィック・ストリング 2 バイト・ブランクのストリング
可変長グラフィック・ストリング 長さ 0 のストリング
固定長バイナリー・ストリング 16 進ゼロのストリング
可変長バイナリー・ストリング 長さ 0 のストリング
日付 既存の行の場合、0001 年 1 月 1 日に対応する日付。 追加行の場合には、現在の日付。
時刻 既存の行の場合、0 時間 0 分 0 秒に対応する時刻。 追加行の場合には、現在の時刻。
タイム・スタンプ 既存の行の場合、0001 年 1 月 1 日 0 時 0 分 0 秒 0 マイクロ秒に対応する日付。 追加行の場合には、現在のタイム・スタンプ。
バイナリー・ストリング (blob) 長さ 0 のストリング
Boolean いいえ

column-definition から DEFAULT を省略すると、 その列のデフォルト値として NULL 値が使用されます。

DEFAULT キーワードに指定できる値のタイプは、次のとおりです。

定数 (Constant)
列のデフォルト値として定数を指定します。 指定する定数は、次の条件を満たしていなければなりません。
  • 第 3 章で説明している割り当ての規則に従って、列に割り当て可能な値でなければなりません。
  • その列が浮動小数点数データ・タイプとして定義されている場合を除き、浮動小数点の定数を指定してはなりません。
  • 列のデータ・タイプが 10 進浮動小数点数の場合は、数値定数または 10 進浮動小数点特殊値でなければなりません。 浮動小数点定数はまず DOUBLE として解釈され、次に 10 進浮動小数点数に変換されます。 DECFLOAT(16) 列の場合、10 進定数の精度値は 16 以下でなければなりません。
  • 定数が 10 進定数の場合、その列のデータ・タイプの位取りを超えるゼロ以外の数字を含めてはなりません (例えば、DECIMAL(5,2) の列のデフォルト値として 1.234 を指定することはできません)。
  • 定数が 254 バイトを超えてはなりません。バイト数には、 引用符文字や、16 進定数の X などの接頭部文字も含まれます。 さらに、定数が cast-function の引数の場合には、 完全修飾された関数名および括弧の文字も含まれます。
日時特殊レジスター (datetime-special-register)
INSERT、UPDATE、または LOAD の実行時における日時特殊レジスターの値 (CURRENT DATE、 CURRENT TIME、または CURRENT TIMESTAMP) を、その列のデフォルト値として指定します。 その列のデータ・タイプは、 指定した特殊レジスターに対応するデータ・タイプでなければなりません (例えば、 CURRENT DATE を指定した場合、データ・タイプは DATE でなければなりません)。 既存の行の場合は、ALTER TABLE ステートメントが処理される時点の現行日付、現行時刻、 または現行タイム・スタンプが値として使用されます。
ユーザー特殊レジスター (user-special-register)
INSERT、UPDATE、または LOAD の実行時におけるユーザー特殊レジスターの値 (CURRENT USER、SESSION_USER、SYSTEM_USER) を、その列のデフォルトとして指定します。 その列のデータ・タイプは、 ユーザー特殊レジスターの長さ属性よりも短い文字ストリングであってはなりません。 なお、SESSION_USER の代わりに USER を、 CURRENT USER の代わりに CURRENT_USER を指定することもできます。 既存の行の場合、値は ALTER TABLE ステートメントの CURRENT USER、 SESSION_USER、または SYSTEM_USER になります。
CURRENT SCHEMA
INSERT、UPDATE、または LOAD の実行時における CURRENT SCHEMA 特殊レジスターの値を、 その列のデフォルト値として指定します。 CURRENT SCHEMA を指定した場合、その列のデータ・タイプは、 CURRENT SCHEMA 特殊レジスターの長さ属性よりも短い文字ストリングであってはなりません。 既存の行の場合は、 ALTER TABLE ステートメントが処理される時点における CURRENT SCHEMA 特殊レジスターの値です。
CURRENT MEMBER
INSERT、UPDATE、または LOAD の実行時における CURRENT MEMBER 特殊レジスターの値を、 その列のデフォルト値として指定します。 CURRENT MEMBER を指定する場合、列のデータ・タイプは整数の割り当てを許容するものでなければなりません。 既存の行の場合は、 ALTER TABLE ステートメントが処理される時点における CURRENT MEMBER 特殊レジスターの値です。
ヌル
その列のデフォルト値として NULL を指定します。 NOT NULL の指定がある場合には、 DEFAULT NULL を同じ列定義に指定してはなりません。
キャスト関数
この形式のデフォルト値は、特殊タイプ (distinct type)、 BLOB、または日時 (DATE、TIME、または TIMESTAMP) データ・タイプとして定義された列に対して使用することができます。 特殊タイプの場合に限り (BLOB または日時タイプに基づく特殊タイプは除く)、関数の名前を列の特殊タイプの名前に一致させる必要があります。 スキーマ名で修飾されている場合には、 その特殊タイプのスキーマ名と同じでなければなりません。 修飾されていない場合には、 関数の解決で得られるスキーマ名は特殊タイプのスキーマ名と同じでなければなりません。 日時タイプに基づく特殊タイプで、デフォルト値が定数の場合、 必ず関数を使用する必要があります。さらに、その関数名は、 暗黙または明示のスキーマ名 SYSIBM を持つ特殊タイプのソース・タイプ名に一致していなければなりません。 他の日時列の場合は、対応する日時関数も使用できます。 BLOB または、BLOB に基づく特殊タイプの場合も、関数を使用する必要があります。 その関数名は、暗黙または明示のスキーマ名 SYSIBM を持つ BLOB でなければなりません。
定数 (Constant)
引数として定数を 1 つ指定します。 指定する定数は、 特殊タイプのソース・タイプに関する定数の規則 (特殊タイプでない場合は、 データ・タイプに関する定数の規則) に従っていなければなりません。 cast-function が BLOB の場合には、 定数としてストリング定数を指定する必要があります。
日時特殊レジスター (datetime-special-register)
CURRENT DATE、CURRENT TIME、または CURRENT TIMESTAMP を指定します。 列の特殊タイプのソース・タイプは、 指定した特殊レジスターに対応するデータ・タイプでなければなりません。
ユーザー特殊レジスター (user-special-register)
CURRENT USER、SESSION_USER、または SYSTEM_USER を指定します。 列の特殊タイプのソース・タイプのデータ・タイプは、 少なくとも 8 バイトの長さのストリング・データ・タイプでなければなりません。 cast-function が BLOB の場合には、 長さ属性が 8 バイト以上でなければなりません。
CURRENT SCHEMA
CURRENT SCHEMA 特殊レジスターの値を指定します。 列の特殊タイプのソース・タイプのデータ・タイプは、CURRENT SCHEMA 特殊レジスターの長さ属性よりも短い文字ストリングであってはなりません。 cast-function が BLOB の場合には、 長さ属性が 8 バイト以上でなければなりません。
EMPTY_CLOB()、EMPTY_DBCLOB()、または EMPTY_BLOB()
その列のデフォルト値として長さゼロのストリングを指定します。 その列は、この関数の結果データ・タイプに対応するデータ・タイプを持っている必要があります。

指定した値が無効な場合、エラー (SQLSTATE 42894) が戻されます。

生成節 (generated-clause)
列の生成値を指定します。 この節は、列定義の default-clause に指定してはなりません (SQLSTATE 42623)。 生成列をシステム期間テンポラル表に追加することはできません (SQLSTATE 428HZ)。 列生成について詳しくは、 CREATE TABLE を参照してください。
GENERATED

データベース・マネージャーが列の値を生成することを指定します。 その列が ID 列、行変更タイム・スタンプ列、行開始列、行終了列、トランザクション開始 ID 列、または生成式列であると見なされる場合、GENERATED を指定する必要があります。

列が NULL 可能な場合、既存の行にある列の値として NULL 値が割り当てられます。 それ以外の場合は、既存の行にある列の値は、以下のように列の定義によって決まります。
  • ROW CHANGE TIMESTAMP は、0001 年 1 月 1 日に対応する日付と、0 時間 0 分 0 秒 0 小数秒に対応する時刻を使用します。
  • ROW BEGIN では、0001 年 1 月 1 日に対応する日付と、0 時 0 分 0 秒 0 小数秒に対応する時刻を使用
  • ROW END では、9999 年 12 月 30 日に対応する日付と、0 時 0 分 0 秒 0 小数秒に対応する時刻を使用
  • TRANSACTION START ID では、0001 年 1 月 1 日に対応する日付と、0 時 0 分 0 秒 0 小数秒に対応する時刻を使用
  • 式では、式から導き出された値を使用
ALWAYS
行が挿入または更新されるときには必ずデータベース・マネージャーによって列の値を生成すること、 また、値は生成値でなければならないことを指定します。 この式の結果は、表に保管されます。 データ伝搬、またはアンロードおよび再ロード操作を実行する場合を除き、GENERATED ALWAYS が推奨されるオプションです。 GENERATED ALWAYS は生成列のデフォルトです。
BY DEFAULT
行が表に挿入されたり、更新されるときに、明示的に値を指定しないかぎり、 列に DEFAULT を指定してデータベース・マネージャーが列に値を生成することを指定します。 BY DEFAULT は、as-row-change-timestamp-clause にのみ指定できます。 データ伝搬を使用したり、アンロードおよび再ロードを実行したりするときは、BY DEFAULT が推奨されるオプションです。
FOR EACH ROW ON UPDATE AS ROW CHANGE TIMESTAMP
この列が、データベース・マネージャーによって生成される値が入るタイム・スタンプ列であることを指定します。 挿入される各行、および任意の列が更新される各行に対して、その列の値が生成されます。 ROW CHANGE TIMESTAMP 列に生成される値は、その行の挿入または更新の時刻に対応するタイム・スタンプです。 1 つのステートメントによって複数の行が挿入または更新される場合、ROW CHANGE TIMESTAMP 列の値は行ごとに異なる可能性があります。

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)。

AS (生成式)
列定義が式に基づくことを指定します。 OFF NO ACCESS オプションを指定した SET INTEGRITY ステートメントを使用して、アクセスなしの SET INTEGRITY ペンディング状態に表を置く必要があります。 ALTER TABLE ステートメントの後、IMMEDIATE CHECKED および FORCE GENERATED オプションを伴う SET INTEGRITY ステートメントを使用して、新しい式に対してこの列にあるすべての値を更新および検査しなければなりません。 generation-expression を使用して列を指定する方法について詳しくは、 CREATE TABLE を参照してください。
AS ROW BEGIN
これを指定すると、行が表に挿入されるとき、または行のいずれかの列が更新されるときには常に、データベース・マネージャーによって値が割り当てられます。 この値は、以下のイベントが初めてトランザクション内で実行されたときに、 時刻機構を読み取ることによって生成されます。
  • 表の行開始列またはトランザクション開始 ID 列に値を割り当てる必要があるデータ変更ステートメント
  • システム期間テンポラル表に含まれる行を削除するとき

システム期間テンポラル表の場合、行開始列の値は、トランザクション全体にわたり固有になるようにデータベース・マネージャーによって生成されます。 関連する履歴表に挿入される行の終了タイム・スタンプ値が開始タイム・スタンプ値より大きくなるように、 タイム・スタンプ値が調整される可能性があります (SQLSTATE 01695)。 これは、競合するトランザクションがシステム期間テンポラル表の同じ行を更新しているときに行われる場合があります。 このタイム・スタンプ値の調整を行うには、データベース構成パラメーターsystime_period_adjYes に設定する必要があります。そうしないと、エラーが戻されます (SQLSTATE 57062)。 単一の SQL トランザクション内で複数の行が挿入または更新され、調整が必要ではない場合、行開始列の値はすべての行において同じになり、別のトランザクションでその列のために生成された値とは異なる固有の値になります。 行開始列は期間 SYSTEM_TIME の開始列として必要になります。このタイプの生成列は、この使用目的で準備されています。

表に含めることができる行開始列は 1 つだけです (SQLSTATE 428C1)。 data-type が指定されない場合、列は TIMESTAMP(12) として定義されます。 data-type を指定する場合は、TIMESTAMP(12) でなければなりません (SQLSTATE 42842)。 この場合、列は NOT NULL として定義される必要があります (SQLSTATE 42831)。 行開始列は更新できません。

AS ROW END

これを指定すると、行が挿入されるとき、または行内のいずれかの列が更新されるときには常に、データベース・マネージャーによって列のデータ・タイプの値が割り当てられます。 割り当てられる値は 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)。 行終了列は更新できません。

AS TRANSACTION START ID
これを指定すると、行が表に挿入されるとき、または行のいずれかの列が更新されるときには常に、データベース・マネージャーによって値が割り当てられます。 データベース・マネージャーは、トランザクションごとに固有のタイム・スタンプ値、または NULL 値を割り当てます。 トランザクション開始 ID 列が NULL 可能で、値を調整する必要がない行開始列が表にある場合は、トランザクション開始 ID 列に NULL 値が割り当てられます。 それ以外の場合、この値は、以下のイベントが初めてトランザクション内で実行されたときに、 時刻機構を読み取ることによって生成されます。
  • 表の行開始列またはトランザクション開始 ID 列に値を割り当てる必要があるデータ変更ステートメント
  • システム期間テンポラル表に含まれる行を削除するとき
単一の SQL トランザクション内で複数の行が挿入または更新される場合、トランザクション開始 ID 列の値はすべての行において同じになり、別のトランザクションでその列のために生成された値とは異なる固有の値になります。

トランザクション開始 ID 列がシステム期間テンポラル表に必要になります。このタイプの生成列は、この使用目的で準備されています。

表に含めることができるトランザクション開始 ID 列は 1 つだけです (SQLSTATE 428C1)。 data-type が指定されない場合、 列は TIMESTAMP(12) として定義されます。 data-type を指定する場合は、TIMESTAMP(12) でなければなりません。 トランザクション開始 ID 列は更新できません。

COMPRESS SYSTEM DEFAULT
システム・デフォルト値 (つまり、具体的な値が指定されない場合にデータ・タイプとして使用されるデフォルト値) の保管スペースを最小限にすることを指定します。 VALUE COMPRESSION 節が指定されていない場合は警告が戻され (SQLSTATE 01648)、 システム・デフォルト値は最小限のスペースに保管されません。

システム・デフォルト値がこのような方法で保管されると、 列に対する挿入や更新操作の際に余分な検査が行われるために、 若干パフォーマンスが低下します。

基本データ・タイプは、DATE、TIME、TIMESTAMP、XML、または構造化データ・タイプであってはなりません (SQLSTATE 42842)。 基本データ・タイプが可変長ストリングの場合には、この節は無視されます。 表が VALUE COMPRESSION に設定されている場合は、長さ 0 のストリング値は自動的に圧縮されます。

security-label-name で保護された列
表に関連するセキュリティー・ポリシーに対応して存在するセキュリティー・ラベルを識別します。 名前は非修飾でなければなりません (SQLSTATE 42601)。 表にはセキュリティー・ポリシーが関連付けられていなければなりません (SQLSTATE 55064)。 表はシステム期間テンポラル表であってはなりません。
NOT HIDDEN または IMPLICITLY HIDDEN
列を隠し列と定義するかどうかを指定します。 列を表の暗黙的参照に組み込むかどうか、SQL ステートメントで明示的に参照できるかどうかは隠し属性によって決まります。 デフォルトは NOT HIDDEN です。
NOT HIDDEN
列を表の暗黙的参照に組み込むこと、および列を明示的に参照できることを指定します。
IMPLICITLY HIDDEN
名前で明示的に参照されない限り列は SQL ステートメントから不可視であることを指定します。 例えば、表に IMPLICITLY HIDDEN 節を使用して定義された列が含まれているとすると、 SELECT *の結果には暗黙的な隠し列は含まれません。 しかし、暗黙的に隠された列の名前を明示的に参照する SELECT の結果については、結果表にその列が組み込まれます。
ADD ユニーク制約
ユニーク制約または主キー制約を定義します。 主キー制約またはユニーク制約を、副表に追加することはできません (SQLSTATE 429B3)。 階層最上部のスーパー表の場合、制約はその表および関連する副表すべてに適用されます。
CONSTRAINT 制約名
主キー制約、またはユニーク制約の名前を指定します。 詳しくは、 CREATE TABLE ステートメントconstraint-name を参照してください。
UNIQUE (column-name, ... BUSINESS_TIME WITHOUT OVERLAPS)
指定した列および期間で構成されるユニーク・キーを定義します。 指定する列は NOT NULL として定義されていなければなりません。 各 column-name (列名) は、表の列を指定するものでなければなりません。 また、同じ列を複数回指定することはできません。 名前は非修飾でなければなりません。 指定する列の数に 2 を加えてそれに指定期間数を掛け合わせた数は 64 を超えてはならず、 その保管時の長さの合計は、ページ・サイズに対応する索引キー長制限値を超えてはなりません。 保管される列の長さについては、 CREATE TABLEバイト・カウント を参照してください。 キーの長さの制限については、 『SQL および XML の制限』を参照してください。 列の長さ属性がページ・サイズに対する索引キーの長さの上限を超えない場合でも、LOB、これらのタイプのうちのいずれかに基づく特殊タイプ、または構造化タイプは、ユニーク・キーの一部として使用できません (SQLSTATE 54008)。 ユニーク・キーにある列セットは、 主キーまたは他のユニーク・キーの列セットと同じにすることはできません (SQLSTATE 01543)。 LANGLEVEL が SQL92E または MIA の場合は、エラーが戻されます。SQLSTATE 42891。 指定した列セットに存在する値は、ユニークである必要があります (SQLSTATE 23515)。

既存の索引がユニーク・キー定義と一致しているかどうか判別するために、チェックが実行されます (索引内の INCLUDE 列はすべて無視されます)。 列の順序や方向 (ASC/DESC/RANDOM) の指定に関係なく、同じ列セットを指定していると、 索引定義は一致します。 ただしパーティション表の場合、表パーティション・キー列のスーパーセットではない列が含まれる非ユニーク・パーティション索引は、一致する索引と見なされません。

一致する索引定義が見つかると、システムに必要な索引であることを示すように索引の説明が変更されます。また、ユニーク索引でなかった場合は、固有性が確認された後にユニーク索引に変更されます。 一致する索引が表に複数ある場合は、既存のユニーク索引が選択されます。 ユニーク索引が複数存在する場合は、任意に選択されます。ただし、次の例外が 1 つあります。
  • パーティション表では、一致するユニークな非パーティション索引や、一致する非ユニーク索引 (パーティションまたは非パーティション) よりも、一致するユニークなパーティション索引が優先されます。
一致する索引が見つからない場合は、CREATE TABLE で説明するように、その列に対してユニーク双方向索引が自動的に作成されます。 ユニーク制約に関連付けられた索引名について詳しくは、 を参照してください。
BUSINESS_TIME WITHOUT OVERLAPS
制約において、BUSINESS_TIME はこの表における期間名を指定します。 表にはこの期間が存在していなければなりません (SQLSTATE 42727)。

BUSINESS_TIME WITHOUT OVERLAPS は、BUSINESS_TIME では重なり合う期間が許可されないこと、およびそれ以外のキーの値は BUSINESS_TIME のどの期間においても固有でなければならないことを指定します。 BUSINESS_TIME WITHOUT OVERLAPS を指定すると、期間 BUSINESS_TIME の終了列および開始列が (この順序で) 自動的に昇順で索引キーに追加され、時間の重なり合いがないように強制されます。 BUSINESS_TIME を定義するために使用される列は、制約の一部として指定することはできません (SQLSTATE 428HW)。

パーティション BUSINESS_TIME WITHOUT OVERLAPS 索引がある、範囲がパーティション化されたアプリケーション期間テンポラル表にパーティションをアタッチする際は、そのパーティション BUSINESS_TIME WITHOUT OVERLAPS 索引と一致する索引がソース表になければなりません。 さらに、それらの索引で PERIODNAME 属性および PERIODPOLICY 属性が一致していなければなりません。

PRIMARY KEY (column-name, ... BUSINESS_TIME WITHOUT OVERLAPS)
指定された列で構成される主キーを定義します。 各 column-name (列名) は、表の列を指定していなければなりません。 また、同じ列を複数回指定することはできません。 名前は非修飾でなければなりません。 指定する列の数は 64 を超えてはならず、 その保管時の長さ合計は、ページ・サイズに対応する索引キー長制限値を超えてはなりません。 保管される列の長さについては、 CREATE TABLEバイト・カウント を参照してください。 キーの長さの制限については、 『SQL の制限』を参照してください。 表には主キーがあってはならず、 指定する列は NOT NULL として定義されているものでなければなりません。 LOB、LOB タイプのいずれかに基づく特殊タイプ、または構造化タイプは、列の長さ属性がページ・サイズに対する索引キーの長さの限度内に収まる長さであっても、主キーの一部として使用することはできません (SQLSTATE 54008)。 主キーの列セットは、ユニーク・キーの列セットと同じであってはなりません (SQLSTATE 01543)。 (LANGLEVEL が SQL92E または MIA の場合は、エラーが戻されます。SQLSTATE 42891) 指定した列セットに存在する値は、ユニークである必要があります (SQLSTATE 23515)。 column-name は、行変更タイム・スタンプの名前、あるいは期間の開始列または終了列の名前にすることはできません (SQLSTATE 428HW)。

既存の索引が主キー定義と一致しているかどうか判別するために、チェックが実行されます (索引内の INCLUDE 列はすべて無視されます)。 列の順序や方向 (ASC/DESC/RANDOM) の指定に関係なく、同じ列セットを指定していると、 索引定義は一致します。 ただしパーティション表の場合、表パーティション・キー列のスーパーセットではない列が含まれる非ユニーク・パーティション索引は、一致する索引と見なされません。

一致する索引定義が見つかると、システムに必要な 1 次索引であることを示すように索引の説明が変更されます。また、ユニーク索引でなかった場合は、固有性が確認された後にユニーク索引に変更されます。 一致する索引が表に複数ある場合は、既存のユニーク索引が選択されます。 ユニーク索引が複数存在する場合は、任意に選択されます。ただし、次の例外が 1 つあります。
  • パーティション表では、一致するユニークな非パーティション索引や、一致する非ユニーク索引 (パーティションまたは非パーティション) よりも、一致するユニークなパーティション索引が優先されます。
一致する索引が見つからない場合は、CREATE TABLE で説明するように、その列に対してユニーク双方向索引が自動的に作成されます。 ユニーク制約に関連付けられた索引名について詳しくは、 を参照してください。

主キーがシャドー表に追加される場合、主キーの列は、 materizalized-query-definitionfullselect で参照される基本表の、強制適用される主キー 制約または強制適用されるユニーク制約の列と一致しなければなりません。

MAINTAINED BY REPLICATION が定義されていないマテリアライズ照会表に主キーを作成することはできません。

1 つの表には、主キーを 1 つだけ定義することができます。

BUSINESS_TIME WITHOUT OVERLAPS
制約において、BUSINESS_TIME はこの表における期間名を指定します。 表にはこの期間が存在していなければなりません (SQLSTATE 42727)。

BUSINESS_TIME WITHOUT OVERLAPS は、BUSINESS_TIME では重なり合う期間が許可されないこと、およびそれ以外のキーの値は BUSINESS_TIME のどの期間においても固有でなければならないことを指定します。 BUSINESS_TIME WITHOUT OVERLAPS を指定すると、期間 BUSINESS_TIME の終了列および開始列が (この順序で) 自動的に昇順で索引キーに追加され、時間の重なり合いがないように強制されます。 BUSINESS_TIME を定義するために使用される列は、制約の一部として指定することはできません (SQLSTATE 428HW)。

パーティション BUSINESS_TIME WITHOUT OVERLAPS 索引がある、範囲がパーティション化されたアプリケーション期間テンポラル表にパーティションをアタッチする際は、そのパーティション BUSINESS_TIME WITHOUT OVERLAPS 索引と一致する索引がソース表になければなりません。 さらに、それらの索引で PERIODNAME 属性および PERIODPOLICY 属性が一致していなければなりません。

constraint-attributes
CREATE TABLEconstraint-attributes を参照してください。
ADD 参照制約
参照制約を定義します。 CREATE TABLEreferential-constraint を参照してください。
ADD 検査制約
チェック制約または機能従属関係を定義します。 CREATE TABLEcheck-constraint を参照してください。
constraint-attributes
CREATE TABLEconstraint-attributes を参照してください。
ADD 分散節
分散キーを定義します。 表は、単一パーティションのデータベース・パーティション・グループにある表スペースに定義する必要があり (SQLSTATE 55037)、既存の分散キーがあってはなりません (SQLSTATE 42889)。 分散キーが表に存在している場合には、新しい分散キーを追加する前に既存のキーをドロップする必要があります。 副表である表に分散キーを追加することはできません (SQLSTATE 428DH)。
DISTRIBUTE BY HASH (column-name...)
指定した列を使用して、分散キーを定義します。 各 column-name (列名) は、表の列を指定していなければなりません。 また、同じ列を複数回指定することはできません。 名前は非修飾でなければなりません。 列のデータ・タイプが BLOB、CLOB、DBCLOB、XML、これらのいずれかのタイプの特殊タイプ、または構造化タイプである場合、分散キーの一部として列を使用することはできません。
ADD RESTRICT ON DROP
表をドロップできないように、また、表を含む表スペースをドロップできないように指定します。
ADD MATERIALIZED QUERY
materialized-query-definition
照会の最適化で使用するために、正規表をマテリアライズ照会表に変更します。 table-name で指定する表には、以下の条件があります。
  • マテリアライズ照会表として以前に定義されていてはならない。
  • 型付き表であってはならない。
  • 何らかの制約、ユニーク索引、またはトリガーが定義されていてはならない。
  • キャッシング使用不可とマークされたニックネームを参照してはならない。
  • 他のマテリアライズ照会表の定義で参照されていてはならない。
  • 照会の最適化に使用可能になっているビューの定義で参照されていてはならない。
表名が基準に適合しない場合、エラーが戻されます (SQLSTATE 428EW)。

materizalized-query-definitionfullselect で直接的または間接的に参照される表の行レベルまたは列レベルのアクセス制御がアクティブになっていて、変更される表の行レベルのアクセス制御がアクティブになっていない場合は、変更される表の行レベルのアクセス制御が暗黙的にアクティブになります。 これにより、マテリアライズ照会表の内容への直接アクセスが制限されます。 そのような行権限が定義される前に表を照会で明示的に参照すると、表にデータがないことを示す警告が返されます (SQLSTATE 02000)。 マテリアライズ照会表にアクセスできるようにするには、適切な行権限を作成します。または該当する場合は、マテリアライズ照会表に対する ALTER TABLE DEACTIVATE ROW ACCESS CONTROL を入力して、行レベルの保護を解除します。

マテリアライズ照会表が、行レベルまたは列レベルのアクセス制御がアクティブな表を参照している場合、materizalized-query-definitionfullselect で参照されている関数は、SECURED 属性を指定して定義されていなければなりません (SQLSTATE 428EC)。

マテリアライズ照会表に変更する表に権限 (システム生成のデフォルトの権限を除く) または マスクが定義されている場合、ALTER は失敗します (SQLSTATE 428EW)。

全選択
表の基礎となる照会を定義します。 既存の表の列は、<!---->fullselect<!----> の結果列と以下のような関係になければなりません (SQLSTATE 428EW)。
  • 列の数が同数でなければなりません。
  • 同じデータ・タイプでなければなりません。
  • 同じ順序を示す位置に同じ列名がなければなりません。

fullselect の結果列として (SQLSTATE 428EW)。 マテリアライズ照会表の fullselect の指定については、 CREATE TABLE を参照してください。 もう 1 つの制約事項として、table-name は全選択で直接的にも間接的にも参照できないという制約があります。

refreshable-table-options
マテリアライズ照会表を変更するためのリフレッシュ可能オプションを指定します。
DATA INITIALLY DEFERRED
REFRESH TABLE または SET INTEGRITY ステートメントを使用して、表のデータを妥当性検査する必要があります。
REFRESH
表のデータを保守する方法を示します。
DEFERRED
REFRESH TABLE ステートメントを使っていつでも表のデータをリフレッシュできます。 表のデータには、 REFRESH TABLE ステートメント処理時のスナップショットである照会結果が反映されるにすぎません。 この属性を定義したマテリアライズ照会表には、INSERT、 UPDATE、 または DELETE ステートメントを使用できません (SQLSTATE 42807)。
IMMEDIATE
DELETE、INSERT、または UPDATE の一部として基礎表に加えられた変更は、 マテリアライズ照会表にカスケードされます。 その場合、表の内容は、どのポイント・イン・タイム指定でも、 指定した subselect (副選択) を処理する場合と同じ内容になります。 この属性を定義したマテリアライズ照会表 (MQT) には、INSERT、UPDATE、または DELETE ステートメントを使用できません (SQLSTATE 42807)。 MAINTAINED BY SYSTEM 節が指定されている場合、REFRESH IMMEDIATE オプションを使用するカラム・オーガナイズ MQT はサポートされません (SQL20058N)。
ENABLE QUERY OPTIMIZATION
マテリアライズ照会表を照会の最適化に使用できるようにします。
DISABLE QUERY OPTIMIZATION
マテリアライズ照会表を照会の最適化に使用しません。 それでもその表を直接照会することはできます。
MAINTAINED BY
マテリアライズ照会表のデータが、システム、ユーザー、 またはレプリケーション・ツールのいずれによって保守されるかを指定します。
SYSTEM
マテリアライズ照会表のデータがシステムによって保守されるように指定します。
ユーザー
マテリアライズ照会表のデータがユーザーによって保守されるように指定します。 ユーザーは、ユーザー保守のマテリアライズ照会表に対して、 更新、削除、また挿入操作を許可されます。 システム保守のマテリアライズ照会表に使用される REFRESH TABLE ステートメントを、ユーザー保守のマテリアライズ照会表に対して開始することはできません。 REFRESH DEFERRED マテリアライズ照会表だけが、MAINTAINED BY USER として定義できます。
REPLICATION
マテリアライズ照会表のデータを外部レプリケーション・テクノロジーで保守することを指定します。 システム保守のマテリアライズ照会表に使用される REFRESH TABLE ステートメントを、レプリケーション保守のマテリアライズ照会表 (シャドー表 と呼ばれる) に対して発行することはできません。 MAINTAINED BY REPLICATION として定義できるのは REFRESH DEFERRED のマテリアライズ照会表だけであり、変更される表はカラム・オーガナイズ表でなければなりません。
FEDERATED_TOOL
マテリアライズ照会表のデータをフェデレーテッド・レプリケーション・ツールで保守することを指定します。 システム保守のマテリアライズ照会表に使用される REFRESH TABLE ステートメントを、フェデレーテッド・ツール保守のマテリアライズ照会表に対して開始することはできません。 REFRESH DEFERRED のマテリアライズ照会表だけが、MAINTAINED BY FEDERATED_TOOL として定義できます。
ALTER FOREIGN KEY 制約名
参照制約 constraint-name の制約属性を変更します。 constraint-name は既存の参照制約を指定する必要があります (SQLSTATE 42704)。
ALTER CHECK 制約名
チェック制約または機能従属関係 constraint-name の制約属性を変更します。 constraint-name は、既存のチェック制約または機能従属関係を指定していなければなりません (SQLSTATE 42704)。
constraint-alteration
参照制約またはチェック制約に関連付けられた属性の変更のオプションです。
ENABLE QUERY OPTIMIZATION または DISABLE QUERY OPTIMIZATION
適切な状況下で、照会の最適化のために、 制約または機能従属関係を使用できるかどうかを指定します。
ENABLE QUERY OPTIMIZATION
制約が真であると想定され、照会の最適化に使用できます。
DISABLE QUERY OPTIMIZATION
制約を照会の最適化に使用できません。
ENFORCED または NOT ENFORCED
挿入、更新、削除などの通常の操作中に、 データベース・マネージャーによって制約が課せられるかどうかを指定します。 親キーが強制適用されない場合、外部キー制約は NOT ENFORCED から ENFORCED に変更できません (SQLSTATE 42888)。
ENFORCED
制約を ENFORCED に変更します。 機能従属関係に ENFORCED を指定することはできません (SQLSTATE 42621)。
NOT ENFORCED
制約を NOT ENFORCED に変更します。
TRUSTED
データは、制約に適合しているものとして信頼できます。 TRUSTED は、表のデータが個別に制約に適合していることが分かっている場合のみに使用してください。 データが制約に適合していない場合、照会結果が予測不能になる可能性があります。 これはデフォルト・オプションです。
インフォメーショナル制約は、どのような場合でも違反すべきではありません。 インフォメーショナル制約は、照会の最適化、および REFRESH IMMEDIATE MQT とステージング表の増分処理で使用されます。 制約に違反している場合、これらの処理によって予測不能な結果が生成されたり、正しくない MQT およびステージング表の内容が生成されたりすることがあります。 例えば、親子関係にある表が保守される順序は重要です。 親子関係にある表に行を挿入する場合、まず最初に親表に行を挿入する必要があります。 親子関係にある表から行を削除するには、まず最初に子表から行を削除する必要があります。 これにより、子表に孤立行が存在することがないようにします。 インフォメーショナル制約に違反している場合、従属 MQT データとステージング表データの増分保守は、その違反しているインフォメーショナル制約に基づいて最適化される可能性があり、正しくないデータが生成されることがあります。
NOT TRUSTED
データは、制約に適合しているものとして信頼することはできません。 NOT TRUSTED の使用目的としては、データがほとんどの行では制約に適合しているものの、すべての行または将来追加される行が制約に適合することは個別には認識されない場合のためのものです。 制約が NOT TRUSTED の場合は、照会の最適化に使用できるように設定されていても、制約に完全に準拠するデータに依存する最適化の実行には、制約は使用されません。 NOT TRUSTED を指定できるのは外部キーのみです (SQLSTATE 42601)。
ALTER column-alteration
列の定義を変更します。 指定した属性のみが変更されます。その他は変更されません。 型付き表の列は変更できません (SQLSTATE 428DH)。 表は履歴表として定義できません (SQLSTATE 428FR)。 式ベースの索引キーで使用される列は、操作で以下の列属性を含まない限り変更できません (SQLSTATE 42893)。
  • 識別 (identity-alteration の下の各節の使用)
  • デフォルトの圧縮 (COMPRESS 節の使用)
  • セキュリティー (SECURED WITH 節または DROP COLUMN SECURITY 節の使用)
column-name
変更される列の名前を指定します。 column-name は、表の既存列を指定するものでなければなりません (SQLSTATE 42703)。 名前は非修飾でなければなりません。 同じ ALTER TABLE ステートメントで追加、変更、またはドロップされる列を指す名前は指定できません (SQLSTATE 42711)。
SET DATA TYPE 変更されたデータ・タイプ
列の新規データ・タイプを指定します。 新しいデータ・タイプは、列の既存のデータ・タイプからキャスト可能でなければなりません (SQLSTATE 42837)。ただし、いずれかのデータ・タイプが特殊タイプである場合は例外です。その場合、特殊タイプのソース・データ・タイプを使用して、データ・タイプがキャスト可能かどうかが判別されます。 LOB 列を異なるデータ・タイプに変更することはできません (SQLSTATE 42837)。 非 LOB 列を LOB データ・タイプに変更することはできません (SQLSTATE 42837)。

列を文字ストリングまたはグラフィック・ストリングのデータ・タイプに変更する操作は、既存データの非ブランク文字の切り捨てが発生する場合は許可されません (SQLSTATE 42837)。 同様に、列をバイナリー・ストリングのデータ・タイプに変更する操作も、16 進の非ゼロのバイトの切り捨てが発生する場合は許可されません。

データ・タイプの変更では、以下の状況を除き、 表に完全にアクセスできるようにするには 、事前に従来の表の再編成を行う必要があります (SQLSTATE 57007)。
  • VARCHAR、VARGRAPHIC、または VARBINARY 列の長さの増加
  • 既存データから末尾ブランクを切り捨てずに、VARCHAR、VARGRAPHIC、または VARBINARY の列の長さを短くする操作 (その列に索引が存在しない場合)

管理ルーチン SYSPROC.ADMIN_REVALIDATE_DB_OBJECTS を呼び出して、表の再編成を行えます。 表が SET INTEGRITY PENDING 状態の場合、表の再編成が必要なデータ・タイプの変更は指定できません (SQLSTATE 57007)。

ストリング・データ・タイプは、列が表パーティション・キーの列である場合、変更できません。

列が分散キーの列である場合、新規データ・タイプは以下の要件を満たしている必要があります (SQLSTATE 42997)。
  • 現在の列タイプと同じデータ・タイプである
  • 現在の列タイプと同じ長さである (ただし、VARCHAR、VARGRAPHIC、および VARBINARY データ・タイプ列の長さを大きくする場合を除く)
  • CHAR および VARCHAR データ・タイプの場合、FOR BIT DATA への変更 (またはその逆) は不可

データ・タイプが LOB の場合、指定された長さ属性は切り捨てられたデータの可能性を考慮できません (SQLSTATE 42837)。

ID 列のデータ・タイプは変更できません (SQLSTATE 42997)。

ROW BEGIN、ROW END、または TRANSACTION START ID として定義された列のデータ・タイプは、変更できません (SQLSTATE 428FR)。

BUSINESS_TIME 期間列のデータ・タイプおよび NULL 可能性は、変更できません (SQLSTATE 428FR)。

表に対してデータ・キャプチャーを有効にすることはできません (SQLSTATE 42997)。

以下のいずれかの条件が当てはまる場合、 列のデータ・タイプは変更できません (SQLSTATE 42893)。
  • 列が生成式列で、列が変更されると生成式列のデータが変更される
  • 列が生成式列の式で参照され、列が変更されると生成式列のデータが変更される
  • 列がチェック制約で参照され、列が変更されるとチェック制約が満たされない
  • 列が参照整合性制約で使用され、列が変更されると参照整合性制約が満たされない

列の変更によってすべての列のバイト総数が最大レコード・サイズを超えてはなりません (SQLSTATE 54010)。 ユニーク制約または索引で列を使用する場合、新しい長さにより、 ユニーク制約または索引の列の保管長の合計が、ページ・サイズに対応する索引キーの長さの上限を超えないようにしなければなりません (SQLSTATE 54008)。 保管される列の長さについては、CREATE TABLEバイト・カウント を参照してください。 キーの長さの制限については、 『SQL および XML の制限』を参照してください。

auto_reval が DISABLED に設定されている場合、列の変更によるカスケード効果を 表 2に示します。

行権限または列マスクのいずれかが変更対象の列に依存している場合 (依存関係は SYSCAT.CONTROLDEP カタログ・ビューに記録されます)、エラーが戻されます (SQLSTATE 42917)。

表 2. 列の変更のカスケード効果
操作 影響
ビューまたはチェック制約によって参照される列を変更する。 変更処理中にオブジェクトが再生成されます。 ビューの場合、変更操作の後にオブジェクトの関数解決またはメソッド解決が変わり、オブジェクトのセマンティクスが変わります。 チェック制約の場合、変更操作の結果としてオブジェクトのセマンティクスが変わるようであれば、操作は失敗します。
従属パッケージ、トリガー、または SQL ルーチンを持つ表の列を変更する。 オブジェクトが無効とマークされ、次回の使用時に再度有効性を確かめられます。
分解が使用可能になった XSROBJECT によって参照される表内の列のタイプを変更する。 XSROBJECT が分解操作不能とマークされます。 XSROBJECT を再度有効にするには、そのマッピングの再調整が必要な場合があります。再調整後に、XSROBJECT に対して ALTER XSROBJECT ENABLE DECOMPOSITION ステートメントを発行してください。
グローバル変数のデフォルトの式で参照される列の変更 グローバル変数のデフォルトの式は変更処理中に妥当性検査されます。 デフォルトの式で使用されるユーザー定義関数を解決できない場合、操作は失敗します。

表がシステム期間テンポラル表である場合、関連した履歴表でも列が変更されます。 表がシステム期間テンポラル表である場合、ストリング・データ・タイプの列は、データ切り捨てが必要になる長さに変更することはできません。また、数値データ・タイプの列を変更するときには、それより精度が低いデータ・タイプにすることはできません (SQLSTATE 42837)。

built-in-type
組み込みデータ・タイプの説明については、『CREATE TABLE』を参照してください。
SET NOT NULL
列に NULL 値を含むことができないよう指定します。 表の既存の行内のこの列に関しては、どの値も NULL 値にすることはできません (SQLSTATE 23502)。 この節は、列が参照制約の外部キーで SET NULL の DELETE 規則によって指定されていて、外部キー内に、他にまったく NULL 可能な列が存在しない場合には許可されません (SQLSTATE 42831)。

列のこの属性を変更するには、 表へのフルアクセスを許可する前に 従来の表再編成が必要です (SQLSTATE 57007)。

変更対象の列に依存する行権限または列マスクが存在する場合、エラーが出されます (SQLSTATE 42917)。

表がシステム期間テンポラル表である場合、関連した履歴表でも列が変更されます。

SET INLINE LENGTH 整数
既存の構造化タイプ、XML、または LOB データ・タイプ列のインライン長を変更します。 インライン長は、基本表の行に格納する構造化タイプ、XML、または LOB データ・タイプのインスタンスの最大サイズをバイト単位で指示します。 基本表の行にインラインで保管できない構造化タイプまたは XML データ・タイプのインスタンスは、LOB 値を保管するのと似た方法で、別個に保管されます。

column-name のデータ・タイプは、構造化タイプ、XML、または LOB データ・タイプでなければなりません (SQLSTATE 42842)。

構造化タイプ列のデフォルトのインライン長は、そのデータ・タイプのインライン長になります (明示的に指定するか、または CREATE TYPE ステートメント内のデフォルトとして)。 構造化タイプのインライン長が 292 未満の場合、列のインライン長には値 292 が使われます。

明示的なインライン長の値は増やすことのみ可能で (SQLSTATE 429B2)、32673 を超えてはなりません (SQLSTATE 54010)。 構造化タイプ列または XML データ・タイプ列の場合、少なくとも 292 でなければなりません。 LOB データ・タイプ列の場合、INLINE LENGTH は最大 LOB 記述子サイズより小さくてはなりません。

列の変更によってすべての列のバイト総数が行サイズ制限を超えてはなりません (SQLSTATE 54010)。

既に他の行とは別に保管されたデータは、このステートメントにより基本表の行にインラインで格納されるようになることはありません。

構造化タイプ列のインライン長の変更を有効にするには、 列のインライン長を変更した後に、指定した表に対して REORG コマンドを開始します。

既存の表内の XML データ・タイプ列のインライン長を変更した利点を生かすには、UPDATE ステートメントによってすべての行を更新してください。

REORG コマンドは、XML 文書の行保管に対して影響を及ぼしません。

LOB データ・タイプ列のインライン長を変更した利点を生かすには、LONGLOBDATA オプションを指定して REORG コマンドを使用するか、対応する LOB 列を UPDATE してください。

以下に例を示します。
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)。

表がシステム期間テンポラル表である場合、インライン長の変更は履歴表に伝搬されます。

SET default-clause
変更される列の新規デフォルト値を指定します。 この列は、既に生成列として定義された列であってはなりません (SQLSTATE 42623)。 指定されたデフォルト値は、 割り当てと比較で説明されている割り当ての規則に従って列に割り当てることができる値を表す必要があります。 デフォルト値を変更しても、既存の行については、 この列に関連した値が変更されるわけではありません。
SET EXPRESSION AS (生成式)
列の式を、指定された generation-expression に変更します。 SET EXPRESSION では、SET INTEGRITY ステートメントを OFF オプションとともに使用して、表を SET INTEGRITY ペンディング状態にする必要があります。 ALTER TABLE ステートメントの後、IMMEDIATE CHECKED および FORCE GENERATED オプションを伴う SET INTEGRITY ステートメントを使用して、新しい式に対してこの列にあるすべての値を更新および検査しなければなりません。 列は、式に基づいて生成される列として定義されていなければなりません (SQLSTATE 42837)。 また表の PARTITIONING KEY、DIMENSIONS、 または KEY SEQUENCE 節に現れないようにする必要があります (SQLSTATE 42997)。 generation-expression は、生成される列を定義する際に適用されるのと同じ規則に適合する必要があります。 generation-expression の結果データ・タイプは、 列のデータ・タイプに割り当て可能でなければなりません (SQLSTATE 42821)。

generation-expression は、列マスクが定義されている列を参照できません (SQLSTATE 42621)。

SET NOT HIDDEN または SET IMPLICITLY HIDDEN
列に非表示属性を指定します。

表がシステム期間テンポラル表である場合、関連した履歴表でも列が変更されます。

NOT HIDDEN
列を表の暗黙的参照に組み込むこと、および列を明示的に参照できることを指定します。
IMPLICITLY HIDDEN
名前で明示的に参照されない限り列は SQL ステートメントから不可視であることを指定します。 例えば、表に IMPLICITLY HIDDEN 節を使用して定義された列が含まれているとすると、 SELECT *の結果には暗黙的な隠し列は含まれません。 しかし、暗黙的に隠された列の名前を明示的に参照する SELECT の結果については、結果表にその列が組み込まれます。

IMPLICITLY HIDDEN は、表の列の中で非表示であるものを除いた最後の列に指定することはできません (SQLSTATE 428GU)。

SET 生成-変更
列の生成属性を変更するよう指定します。 列が ID 列であっても行変更タイム・スタンプ列であっても、GENERATED を指定できます (SQLSTATE 42837)。 表がシステム期間テンポラル表である場合、関連する履歴表の列に、この変更による影響はありません。 列のデフォルトが存在する場合は、そのデフォルトをドロップする必要があります。 そのためには、同じ column-alteration で DROP DEFAULT 節を 1 つ使用します。 テンポラル履歴表の列には、SET GENERATED を指定することはできません (SQLSTATE 428FR)。
GENERATED ALWAYS
行が挿入または更新されるときには必ずデータベース・マネージャーによって列の値を生成すること、 また、値は生成値でなければならないことを指定します。 データ伝搬や、アンロードおよび再ロード操作を実行しているのでなければ、 GENERATED ALWAYS が推奨されるオプションです。 ALWAYS は生成列のデフォルトです。
GENERATED BY DEFAULT
行が表に挿入されたり、更新されるときに、明示的に値を指定しないかぎり、 列に DEFAULT を指定してデータベース・マネージャーが列に値を生成することを指定します。 GENERATED BY DEFAULT は、as-row-change-timestamp-clause にのみ指定できます。 データ伝搬を使用したり、アンロードおよび再ロードを実行したりするときは、GENERATED BY DEFAULT が推奨されるオプションです。
identity-alteration
列の識別属性を変更します。 その列は ID 列でなければなりません。
SET INCREMENT BY 数値定数
連続した ID 列値のインターバルを指定します。 次に生成される ID 列の値は、最後に割り当てられた値に増分を適用することによって決まります。 列はあらかじめ IDENTITY 属性で定義されていなければなりません (SQLSTATE 42837)。

この値は、この列に割り当て可能な任意の正または負の値にすることができます (SQLSTATE 42815)。これは長精度整数定数の値を超えず (SQLSTATE 42820)、小数点の右側に非ゼロの数字がない値にします (SQLSTATE 428FA)。

この値が負の場合、ALTER ステートメント以降は降順になります。 この値が 0 の場合、または正の場合は、 ALTER ステートメント以降は昇順になります。

SET NO MINVALUE または MINVALUE numeric-constant
降順 ID 列が値の生成を循環または停止する最小値、あるいは最大値に達した後、 昇順 ID 列が循環する最小値を指定します。 列は、指定した表の中に存在していなければならず (SQLSTATE 42703)、 あらかじめ IDENTITY 属性で定義されていなければなりません (SQLSTATE 42837)。
NO MINVALUE
昇順シーケンスの場合、値は元の開始値です。 降順シーケンスの場合、列のデータ・タイプの最小値になります。
MINVALUE 数値定数
最小値にする数値定数を指定します。 この値は、この列に割り当て可能な任意の正または負の値にすることができます (SQLSTATE 42815)。ただし最大値以下の値で (SQLSTATE 42815)、小数点の右側に非ゼロの数字がない値にします (SQLSTATE 428FA)。
SET NO MAXVALUE または MAXVALUE numeric-constant
昇順 ID 列が値の生成を循環または停止する最大値、あるいは最小値に達した後、 降順 ID 列が循環する最大値を指定します。 列は、指定した表の中に存在していなければならず (SQLSTATE 42703)、 あらかじめ IDENTITY 属性で定義されていなければなりません (SQLSTATE 42837)。
NO MAXVALUE
昇順シーケンスの場合、値は列のデータ・タイプの最大値です。 降順シーケンスの場合、値は最初の開始値です。
MAXVALUE 数値定数
最大値にする数値定数を指定します。 この値は、この列に割り当て可能な任意の正または負の値にすることができます (SQLSTATE 42815)。ただし最小値以上の値で、(SQLSTATE 42815)、小数点の右側に非ゼロの数字がない値にします (SQLSTATE 428FA)。
SET NO CYCLE または CYCLE
この ID 列がその最大値または最小値を生成した後も値の生成を続行するかどうかを指定します。 列は、指定した表の中に存在していなければならず (SQLSTATE 42703)、 あらかじめ IDENTITY 属性で定義されていなければなりません (SQLSTATE 42837)。
NO CYCLE
最大値または最小値に達した後は、ID 列の値を生成しないことを指定します。
CYCLE
最大値または最小値に達した後、この列について値の生成が続行されることを指定します。 このオプションが使用されると、昇順 ID 列が最大値に達した後は、その最小値が生成されます。 降順 ID 列が最小値に達した後は、その最大値が生成されます。 ID 列の最大値および最小値は、循環に使用される範囲を決定します。

CYCLE が有効な場合、一つの ID 列で生成される値が重複する可能性があります。 必須ではありませんが、固有値が必要な場合は、ID 列を使用して定義した単一列のユニーク索引により、固有性を確保できます。 このような ID 列にユニーク索引が存在し、固有ではない値が生成されると、エラーが起こります (SQLSTATE 23505)。

SET NO CACHE または CACHE integer-constant
特定の事前割り振り値を、 高速アクセスできるようメモリーに保存するかどうかを指定します。 これはパフォーマンスおよびチューニング・オプションです。 列はあらかじめ IDENTITY 属性で定義されていなければなりません (SQLSTATE 42837)。
NO CACHE
ID 列の値を事前割り振りしないことを指定します。

Db2 pureScale® 環境では、要求の順序で ID 値を生成する 必要がある 場合は、NO CACHE オプションを使用する必要があります。

このオプションが指定されると、ID 列の値はキャッシュに保管されません。 この場合、新しい ID 値が要求されるたびに、ログに対して同期入出力が行われます。

CACHE 整数定数
事前割り振りされ、メモリーに保管される IDENTITY シーケンスの値の数を指定します。 ID 列について値が生成される場合、値を事前割り振りしてキャッシュに保管しておくと、 ログへの同期入出力が少なくなります。

ID 列に新しい値が必要になったときに未使用の値がキャッシュにない場合は、値を割り振るためにログへの入出力を待機する必要があります。 一方、ID 列に新しい値が必要になったときに未使用の値がキャッシュにある場合は、ログへの入出力がないので、その ID 値を素早く割り振ることができます。

正常な操作またはシステム障害のためにデータベースが非アクティブになると、コミットされたステートメントで使用されていないキャッシュ済みシーケンス値はすべて失われます。つまり、それらが今後使用されることはありません。 失われる可能性のある ID 列の値の最大数は、以下のように計算されます。
  • ORDER を指定する場合は、CACHE オプションに指定する値が最大数になります。
  • 複数パーティション または Db2 pureScaleでは、 CACHE オプションに指定される値に、新しい ID 値を生成するメンバーの数を掛けた値が最大数になります。

最小値は 2 です (SQLSTATE 42815)。

Db2 pureScale 環境では、CACHE と ORDER の両方が指定されている場合、ORDER の指定は CACHE の指定をオーバーライドし、代わりに NO CACHE が有効になります。

SET NO ORDER または ORDER
要求の順序で ID 列の値が生成されるかどうかを指定します。 列は、指定した表の中に存在していなければならず (SQLSTATE 42703)、 あらかじめ IDENTITY 属性で定義されていなければなりません (SQLSTATE 42837)。
NO ORDER
要求の順序で ID 列の値を生成する必要がないことを指定します。
ORDER
要求の順序で ID 列の値が生成されることを指定します。
RESTART または RESTART WITH numeric-constant
ID 列に関連付けられたシーケンスの状態をリセットします。 WITH numeric-constant が指定されていないと、ID 列のシーケンスは、 作成されたときに開始値として (暗黙的または明示的のいずれかで) 定義された 値で再開始されます。

列は、指定した表の中に存在していなければならず (SQLSTATE 42703)、 あらかじめ IDENTITY 属性で定義されていなければなりません (SQLSTATE 42837)。 RESTART は、START WITH の元の値を変更することはありません

numeric-constant は完全な数値定数であり、この列に割り当て可能な任意の正または負の値にすることができます (SQLSTATE 42815)。ただし、小数点の右側に非ゼロの数字がない値にします (SQLSTATE 428FA)。 numeric-constant が列の次の値として使用されます。

SET generation-attribute as-identity-clause
列を ID 列に変更します。 列にデフォルトがある場合、または列が既に生成列である場合に、 この列変更を指定してはなりません (SQLSTATE 42837)。 表がシステム期間テンポラル表である場合、関連する履歴表の列に、この変更による影響はありません。
GENERATED ALWAYS
行が挿入または更新されるときには必ずデータベース・マネージャーによって列の値を生成すること、 また、値は生成値でなければならないことを指定します。 ALWAYS は生成列のデフォルトです。
GENERATED BY DEFAULT
明示的な値が指定されていない限り、行が挿入または更新されるときにはデータベース・マネージャーによって列の値を生成すること、 また、デフォルト値を生成しなければならないことを指定します。
as-identity-clause
その列が表の ID 列であることを指定します。 ID 列は 1 つの表に 1 つのみ指定できます (SQLSTATE 428C1)。 この列には NULL 可能でないことだけを指定する必要があり (SQLSTATE 42997)、列に関連付けられたデータ・タイプは、位取りがゼロの完全な数値データ・タイプでなければなりません (SQLSTATE 42815)。 完全な数値データ・タイプは次のいずれかです: SMALLINT、INTEGER、BIGINT、DECIMAL、 位取りがゼロの NUMERIC、またはこれらのいずれかのタイプに基づく特殊タイプ。 ID オプションについて詳しくは、 CREATE TABLE を参照してください。
SET GENERATED ALWAYS
列を、生成式列、行開始列、行終了列、またはトランザクション開始 ID 列に変更します。 GENERATED ALWAYS は、行が挿入または更新されるときには必ずデータベース・マネージャーによって列の値を生成すること、 また、値は生成値でなければならないことを指定します。
AS (生成式)
列定義が式に基づくことを指定します。 その列は生成式で既に定義されていてはならず、ID 列であってはならず、 明示的デフォルトを持つこともできません (SQLSTATE 42837)。 generation-expression は、生成される列を定義する際に適用されるのと同じ規則に適合する必要があります。 generation-expression の結果データ・タイプは、 列のデータ・タイプに割り当て可能でなければなりません (SQLSTATE 42821)。 その列は、分散キー列またはマルチディメンション・クラスタリング (MDC) キーで参照されていてはなりません (SQLSTATE 42997)。

generation-expression は、列マスクが定義されている列を参照できません (SQLSTATE 42621)。

AS ROW BEGIN
これを指定すると、行が表に挿入されるとき、または行のいずれかの列が更新されるときには常に、データベース・マネージャーによって値が割り当てられます。 この値は、以下のイベントが初めてトランザクション内で実行されたときに、 時刻機構を読み取ることによって生成されます。
  • 表の行開始列またはトランザクション開始 ID 列に値を割り当てる必要があるデータ変更ステートメント
  • システム期間テンポラル表に含まれる行を削除するとき

システム期間テンポラル表の場合、行開始列の値は、トランザクション全体にわたり固有になるようにデータベース・マネージャーによって生成されます。 関連する履歴表に挿入される行の終了タイム・スタンプ値が開始タイム・スタンプ値より大きくなるように、 タイム・スタンプ値が調整される可能性があります (SQLSTATE 01695)。 これは、競合するトランザクションがシステム期間テンポラル表の同じ行を更新しているときに行われる場合があります。 このタイム・スタンプ値の調整を行うには、データベース構成パラメーターsystime_period_adjYes に設定する必要があります。そうしないと、エラーが戻されます (SQLSTATE 57062)。 単一の SQL トランザクション内で複数の行が挿入または更新され、調整が必要ではない場合、行開始列の値はすべての行において同じになり、別のトランザクションでその列のために生成された値とは異なる固有の値になります。 行開始列は期間 SYSTEM_TIME の開始列として必要になります。このタイプの生成列は、この使用目的で準備されています。

表に含めることができる行開始列は 1 つだけです (SQLSTATE 428C1)。 data-type が指定されない場合、列は TIMESTAMP(12) として定義されます。 data-type を指定する場合は、TIMESTAMP(12) でなければなりません (SQLSTATE 42842)。 この場合、列は NOT NULL として定義される必要があります (SQLSTATE 42831)。 行開始列は更新できません。

AS ROW END

これを指定すると、行が挿入されるとき、または行内のいずれかの列が更新されるときには常に、データベース・マネージャーによって列のデータ・タイプの最大値が割り当てられます。

行終了列が期間 SYSTEM_TIME の 2 番目の列として必要になります。このタイプの生成列は、この使用目的で準備されています。

表に含めることができる行終了列は 1 つだけです (SQLSTATE 428C1)。 data-type が指定されない場合、 列は TIMESTAMP(12) として定義されます。 data-type を指定する場合は、TIMESTAMP(12) でなければなりません (SQLSTATE 42842)。 この場合、列は NOT NULL として定義される必要があります (SQLSTATE 42831)。 行終了列は更新できません。

AS TRANSACTION START ID
これを指定すると、行が表に挿入されるとき、または行のいずれかの列が更新されるときには常に、データベース・マネージャーによって値が割り当てられます。 データベース・マネージャーは、トランザクションごとに固有のタイム・スタンプ値、または NULL 値を割り当てます。 トランザクション開始 ID 列が NULL 可能で、値を調整する必要がない行開始列が表にある場合には、トランザクション開始 ID 列に NULL 値が割り当てられます。 それ以外の場合、この値は、以下のイベントが初めてトランザクション内で実行されたときに、 時刻機構を読み取ることによって生成されます。
  • 表の行開始列またはトランザクション開始 ID 列に値を割り当てる必要があるデータ変更ステートメント
  • システム期間テンポラル表に含まれる行を削除するとき
単一の SQL トランザクション内で複数の行が挿入または更新される場合、トランザクション開始 ID 列の値はすべての行において同じになり、別のトランザクションでその列のために生成された値とは異なる固有の値になります。

トランザクション開始 ID 列がシステム期間テンポラル表に必要になります。このタイプの生成列は、この使用目的で準備されています。

表に含めることができるトランザクション開始 ID 列は 1 つだけです (SQLSTATE 428C1)。 data-type が指定されない場合、 列は TIMESTAMP(12) として定義されます。 data-type を指定する場合は、TIMESTAMP(12) でなければなりません。 トランザクション開始 ID 列は更新できません。

DROP DEFAULT
列の現行デフォルトをドロップします。 指定される列には、デフォルト値がなければなりません (SQLSTATE 42837)。 システム期間テンポラル表では、このアクションは履歴表に伝搬します。
DROP GENERATED
列の、生成された属性をドロップします。 その列は、生成列として定義されていなければなりません (SQLSTATE 42837)。 その列は、システム期間テンポラル表の行開始列、行終了列、またはトランザクション開始 ID 列として定義されていてはなりません (SQLSTATE 428FR)。
DROP NOT NULL
列の NOT NULL 属性をドロップし、列が NULL 値を持つことを許可します。 この節は、列が主キーで指定されている場合、また表のユニーク制約で指定されている場合には許可されません (SQLSTATE 42831)。また、行開始列または行終了列である場合にも許可されません (SQLSTATE 42837)。

列のこの属性を変更するには、 表へのフルアクセスを許可する前に 従来の表再編成が必要です (SQLSTATE 57007)。

表に対してデータ・キャプチャーを有効にすることはできません (SQLSTATE 42997)。 DROP NOT NULL は、BUSINESS_TIME 期間に属する列ではブロックされます (SQLSTATE 428FR)。

表がシステム期間テンポラル表である場合、NOT NULL 属性は、関連した履歴表の対応する列からもドロップされます。

変更対象の列に依存する行権限または列マスクが存在する場合、エラーが出されます (SQLSTATE 42917)。

ADD SCOPE
有効範囲がまだ定義されていない既存の参照タイプ列に、有効範囲を追加します (SQLSTATE 428DK)。 変更する表が型付き表である場合、 列をスーパー表から継承することはできません (SQLSTATE 428DJ)。
typed-table-name
型付き表の名前。 column-name のデータ・タイプは REF(S) でなければなりません。 Styped-table-name のタイプを表します (SQLSTATE 428DM)。 値が typed-table-name の既存行を参照していることを確認するための、 column-name の既存値の検査は行われません。
typed-view-name
型付きビューの名前。 column-name のデータ・タイプは REF(S) でなければなりません。 Styped-view-name のタイプを表します (SQLSTATE 428DM)。 値が typed-view-name の既存行を参照していることを確認するための、column-name の既存値の検査は行われません。
COMPRESS
この列のデフォルト値をさらに効率よく保管するかどうかを指定します。
SYSTEM DEFAULT
システム・デフォルト値 (つまり、 特定の値が指定されない場合にデータ・タイプとして使用されるデフォルト値) が最小限のスペースを使用して保管されるように指定します。 表の VALUE COMPRESSION 属性がまだアクティブ化されていない場合には、 警告が戻され (SQLSTATE 01648)、システム・デフォルト値が最小限のスペースを使用して保管されるようにはなりません。

システム・デフォルト値がこのような方法で保管されると、 列上での挿入や更新操作の際に余分な検査が行われるために、若干パフォーマンスが低下します。

列の既存のデータは変更されません。 既存のデータが最小限のスペースを使用してシステム・デフォルト値を保管できるようにするために、オフライン表再編成を検討してください。

オフ
システム・デフォルト値が列の正規値として保管されるように指定します。 列の既存のデータは変更されません。 既存のデータの変更のために、オフラインでの再編成をお勧めします。

基本データ・タイプは、DATE、TIME、または TIMESTAMP であってはなりません (SQLSTATE 42842)。 基本データ・タイプが可変長ストリングの場合には、この節は無視されます。 表が VALUE COMPRESSION に設定されている場合は、長さ 0 のストリング値は自動的に圧縮されます。

変更する表が型付き表である場合、 列をスーパー表から継承することはできません (SQLSTATE 428DJ)。

SECURED WITH セキュリティー・ラベル名
表に関連するセキュリティー・ポリシーに対応して存在するセキュリティー・ラベルを識別します。 名前は非修飾でなければなりません (SQLSTATE 42601)。 表にセキュリティーが関連付けられている必要があります (SQLSTATE 55064)。 表はシステム期間テンポラル表であってはなりません。
DROP COLUMN SECURITY
列を無保護列に変更します。
ACTIVATE ROW ACCESS CONTROL

表に対する行レベルのアクセス制御をアクティブにします。 この表は、型付き表、カタログ表 (SQLSTATE 55019)、作成済み一時表、宣言済み一時表 (SQLSTATE 42995)、ニックネーム (SQLSTATE 42809)、ビュー (SQLSTATE 42809)、または外部表 (SQLSTATE 42858) にすることはできません。 表は、シャドー表、またはシャドー表の基本表を指定するものであってはなりません (SQLSTATE 428HZ)。

デフォルトの行権限が暗黙的に作成され、この表の行に対するアクセスを禁止します。ただし、SECADM 権限を持つユーザーが明示的に作成した行権限によって許可される場合は例外です。

この表がデータ操作ステートメントで参照されるとき、その表に対して作成されたすべての有効な行権限 (デフォルトの行権限を含む) がデータベース・マネージャーによって暗黙的に適用され、表の中でアクセス可能な行セットが制御されます。

この表にトリガーが存在する場合、トリガーは SECURED 属性で定義する必要があります (SQLSTATE 55019)。

ビューに関して、NOT SECURED 属性を指定して定義された INSTEAD OF トリガーが存在する場合、 そのビューの定義内で、この表を参照してはなりません (SQLSTATE 55019)。

この表をマテリアライズ照会表が参照している場合は、materizalized-query-definitionfullselect で参照される関数は、SECURED 属性を指定して定義されていなければなりません (SQLSTATE 55019)。

マテリアライズ照会表 (またはステージング表) が、行レベルのアクセス制御がアクティブになっている表に (ビューを介して直接的または間接的に) 依存し、そのマテリアライズ照会表 (またはステージング表) の行レベルのアクセス制御がまだアクティブになっていなかった場合は、マテリアライズ照会表 (またはステージング表) の行レベルのアクセス制御が暗黙的にアクティブになります。 これにより、マテリアライズ照会表 (またはステージング表) の内容への直接アクセスが制限されます。 そのような行権限が定義される前に表を照会で明示的に参照すると、表にデータがないことを示す警告が返されます (SQLSTATE 02000)。 マテリアライズ照会表 (またはステージング表) にアクセスするには、適切な行権限を作成します。またはふさわしいようであれば、マテリアライズ照会表 (またはステージング表) に対する ALTER TABLE DEACTIVATE ROW ACCESS CONTROL ステートメントを発行して、行レベルの保護を除去します。

この表において行アクセス制御が既にアクティブとして定義されている場合、ACTIVATE ROW ACCESS CONTROL は無視されます。

表がシステム期間テンポラル表である場合、データベース・マネージャーは自動的に、履歴表での行アクセス制御をアクティブにし、デフォルトの行権限を履歴表に作成します。

表がカラム・オーガナイズ表の場合、データベース・マネージャーは自動的に、概要表の行アクセス制御をアクティブにし、概要表のデフォルトの行権限を作成します。

ACTIVATE COLUMN ACCESS CONTROL

表に対する列レベルのアクセス制御をアクティブにします。 この表は、型付き表、カタログ表 (SQLSTATE 55019)、作成済み一時表、宣言済み一時表 (SQLSTATE 42995)、ニックネーム (SQLSTATE 42809)、ビュー (SQLSTATE 42809)、または外部表 (SQLSTATE 42858) にすることはできません。 表は、シャドー表、またはシャドー表の基本表を指定するものであってはなりません (SQLSTATE 428HZ)。

この表へのアクセスは制限されませんが、表をデータ操作ステートメントで参照すると、その表に対して作成されたすべての有効な列マスクがデータベース・マネージャーによって暗黙的に適用され、照会の最終結果表では、参照した列として返された値がマスクされます。

この表にトリガーが存在する場合、トリガーは SECURED 属性で定義する必要があります (SQLSTATE 55019)。

この表をマテリアライズ照会表が参照している場合は、materizalized-query-definitionfullselect で参照される関数は、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

表に対する行レベルのアクセス制御を非アクティブにします。 この表がデータ操作ステートメントで参照されるとき、その表に対して定義された既存の有効な行権限はデータベース・マネージャーによって適用されないため、表の中でアクセス可能な行セットは制御されません。 表は、シャドー表、またはシャドー表の基本表を指定するものであってはなりません (SQLSTATE 428HZ)。

この表において行アクセス制御がアクティブになっていない場合、DEACTIVATE ROW ACCESS CONTROL は無視されます。

DEACTIVATE COLUMN ACCESS CONTROL

表に対する列レベルのアクセス制御を非アクティブにします。 この表がデータ操作ステートメントで参照されるとき、その表に対して定義された既存の有効な列マスクはデータベース・マネージャーによって適用されないため、照会の最終結果表で参照される列について返される値は制御されません。 表は、シャドー表、またはシャドー表の基本表を指定するものであってはなりません (SQLSTATE 428HZ)。

この表において列アクセス制御がアクティブになっていない場合、DEACTIVATE COLUMN ACCESS CONTROL は無視されます。

RENAME COLUMN source-column-name TO ターゲット・カラム名
source-column-name で指定されている列を、target-column-name で指定されている名前に名前変更します。 auto_revalデータベース構成パラメーターが DISABLED に設定されている場合、ALTER TABLE ステートメントの RENAME COLUMN オプションは、再有効化即時セマンティクスの制御下にある場合と同様に動作します。

表は履歴表として定義できません (SQLSTATE 42986)。 表がシステム期間テンポラル表である場合、関連した履歴表でも列が名前変更されます。

式ベースの索引キーで使用される列は、名前変更できません (SQLSTATE 42893)。

RENAME COLUMN では、行権限または列マスクの定義で参照される列を名前変更してはなりません。 また、列マスクが定義されている列を名前変更することもできません (SQLSTATE 42917)。 マスクまたは権限が定義されている表、あるいはマスクまたは権限の定義で参照されている表に属する列を名前変更する場合、そのマスクまたは権限は無効になります。 列アクセス制御がアクティブになっていて無効なマスクが定義されている表へのアクセスは、無効なマスクを無効化、ドロップ、または再作成するまでブロックされます (SQLSTATE 560D0)。 行アクセス制御がアクティブになっていて無効な行権限が定義されている表へのアクセスは、無効な権限を無効化、ドロップ、または再作成するまでブロックされます (SQLSTATE 560D0)。
ソース列名 (source-column-name)
名前変更する列の名前を指定します。 source-column-name は、表の既存列を指定するものでなければなりません (SQLSTATE 42703)。 名前は非修飾でなければなりません。 同じ ALTER TABLE ステートメントで追加、変更、またはドロップされる列を指す名前は指定できません (SQLSTATE 42711)。
ターゲット列名 (target-column-name)
列の新しい名前。 名前は非修飾でなければなりません。 表に既にある列名または期間名を使用してはなりません (SQLSTATE 42711)。
DROP PRIMARY KEY
主キーの定義、およびその主キーに従属するすべての参照制約をドロップします。 表には主キーがなければなりません (SQLSTATE 42888)。
DROP FOREIGN KEY 制約名
制約名が constraint-name の参照制約をドロップします。 constraint-name には参照制約を指定する必要があります (SQLSTATE 42704)。 参照制約のドロップの影響については、 を参照してください。
DROP UNIQUE 制約名
制約名が constraint-name であるユニーク制約の定義、およびこのユニーク制約に従属するすべての参照制約をドロップします。 constraint-name には既存の UNIQUE 制約を指定する必要があります (SQLSTATE 42704)。 ユニーク制約のドロップの影響については、 を参照してください。
DROP CHECK 制約名
制約名が constraint-name のチェック制約をドロップします。 constraint-name は、 表に定義されている既存のチェック制約を指定していなければなりません (SQLSTATE 42704)。
DROP CONSTRAINT 制約名
制約名が constraint-name の制約をドロップします。 constraint-name は、表に定義されている既存のチェック制約、参照制約、主キー、またはユニーク制約のいずれかを指定していなければなりません (SQLSTATE 42704)。 制約の除去の影響については、 を参照してください。
DROP COLUMN
指定の列を表からドロップします。 型付き表を使用することはできません (SQLSTATE 428DH)。 表に対してデータ・キャプチャーを有効にすることはできません (SQLSTATE 42997)。

列をドロップするには、 表の完全アクセスを許可する前に 従来の表の再編成が必要です (SQLSTATE 57007)。

XML 列をドロップできるのは、表内の他の XML 列がすべて同時にドロップされる場合のみです。

DROP COLUMN では、行権限または列マスクの定義で参照される列をドロップしてはなりません (SQLSTATE 42917)。 ただし、列マスクが定義された列はドロップできます。 列をドロップするとき、その列に対して定義された列マスクもドロップされます。

column-name
ドロップする列を指定します。 列名は非修飾でなければなりません。 この名前は、指定の表の列を特定するものでなければなりません (SQLSTATE 42703)。 この名前は、表の唯一の列を指定するものであってはなりません (SQLSTATE 42814)。また、期間の定義で参照される列であってもなりません (SQLSTATE 42817)。 この名前は、表の列の中で非表示であるものを除いた最後の列を指定するものであってはなりません (SQLSTATE 428GU)。 この名前は、システム期間テンポラル表または履歴表として定義された表の列を指定するものであってはなりません (SQLSTATE 428FR)。 この名前は、分散キー、表のパーティション・キー、または編成ディメンションの一部となっている列を指定するものであってはなりません (SQLSTATE 42997)。
CASCADE
オブジェクトに基づいて以下のアクションを指定します。
  • ドロップされた列に従属するすべてのビューに、作動不能とマークします。
  • ドロップされた列に従属する索引、トリガー、SQL 関数、制約、またはグローバル変数もすべてドロップします。
  • 列を含む表に従属するすべての分解可能 XSROBJECT が、分解不能になります。
トリガーは、UPDATE OF の列リストまたはトリガー・アクションのどこかで列を参照している場合、その列に従属します。 分解可能な XSROBJECT は、XML エレメントまたは属性が表にマッピングされている場合、その表に従属します。 SQL 関数またはグローバル変数が他のデータベース・オブジェクトに従属する場合、CASCADE オプションを使用してその関数またはグローバル関数をドロップできない可能性があります。 CASCADE はデフォルトです。
RESTRICT
列に従属しているビュー、索引、トリガー、制約、またはグローバル変数が存在する場合、または列を含む表に従属している分解可能 XSROBJECT が存在する場合は列をドロップできないことを指定します (SQLSTATE 42893)。 トリガーは、UPDATE OF の列リストまたはトリガー・アクションのどこかで列を参照している場合、その列に従属します。 分解可能な XSROBJECT は、XML エレメントまたは属性が表にマッピングされている場合、その表に従属します。 検出された最初の従属オブジェクトは、管理ログで識別されます。
表 3. 列のドロップのカスケード効果
操作 RESTRICT の効果 CASCADE の効果
ビューまたはトリガーによって参照される列をドロップする。 列のドロップは許可されません。 オブジェクトと、そのオブジェクトに依存するすべてのオブジェクトがドロップされます。
索引のキーで参照される列をドロップする。 索引で参照されているすべての列が、同じ ALTER TABLE ステートメントでドロップされていれば、索引のドロップが許可されます。 それ以外の場合は、列のドロップは許可されません。 索引がドロップされます。
ユニーク制約で参照されている列をドロップする。 ユニーク制約で参照されているすべての列が、同じ ALTER TABLE ステートメントでドロップされていれば、また、ユニーク制約が参照制約によって参照されていなければ、列と制約がドロップされます。 (制約を満たすために使用されている索引もドロップされます。) それ以外の場合は、列のドロップは許可されません。 ユニーク制約と、そのユニーク制約を参照するすべての参照制約がドロップされます。 (これらの制約によって使用される索引もすべてドロップされます。)
参照制約で参照されている列をドロップする。 参照制約で参照されているすべての列が、同じ ALTER TABLE ステートメントでドロップされていれば、列と制約がドロップされます。 それ以外の場合は、列のドロップは許可されません。 参照制約がドロップされます。
ドロップされないシステム生成列によって参照されている列をドロップする。 列のドロップは許可されません。 列のドロップは許可されません。
チェック制約で参照されている列をドロップする。 列のドロップは許可されません。 チェック制約がドロップされます。
分解可能な XSROBJECT で参照されている列をドロップする。 列のドロップは許可されません。 XSROBJECT が分解操作不能とマークされます。 XSROBJECT を再度有効にするには、そのマッピングの再調整が必要な場合があります。再調整後に、XSROBJECT に対して ALTER XSROBJECT ENABLE DECOMPOSITION ステートメントを発行してください。
グローバル変数のデフォルトの式で参照される列のドロップ 列のドロップは許可されません。 グローバル変数はドロップされます。 ただし、グローバル変数に依存する他のオブジェクト (カスケードを許可しないオブジェクト) が存在するためにグローバル変数のドロップが許可されなければ、ドロップされません。
DROP RESTRICT ON DROP
表、および表を含む表スペースのドロップに関する制約事項があれば削除します。
DROP DISTRIBUTION
表の配分定義をドロップします。 表には配分定義がなければなりません (SQLSTATE 428FT)。 表の表スペースは、単一パーティションのデータベース・パーティション・グループ上で定義される必要があります。
DROP MATERIALIZED QUERY
表がマテリアライズ照会表と見なされなくなるように、マテリアライズ照会表を変更します。 table-name で指定される表は、複製ではないマテリアライズ照会表として定義されていなければなりません (SQLSTATE 428EW)。 table-name の列の定義は変更されませんが、照会の最適化にこの表を使用することはできなくなり、 REFRESH TABLE ステートメントも使用できなくなります。

行レベルのアクセス制御または列レベルのアクセス制御がこの表で有効である場合、この制御は、表がマテリアライズ照会表でなくなった後も残ります。

ADD PERIOD period-definition
期間定義を表に追加します。
SYSTEM_TIME (begin-column-nameend-column-name)

システム期間を 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 (begin-column-nameend-column-name)

アプリケーション期間を 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)。

DROP PERIOD 期間名
指定した期間を表からドロップします。 この ALTER TABLE ステートメントで既に追加または変更された期間を示す名前は指定できません (SQLSTATE 42711)。 この期間に対して暗黙的に生成された (期間が定義されたときに作成された) チェック制約と、その期間を参照する索引もドロップされます。
period-name
期間を指定します。 有効な期間名は BUSINESS_TIME または SYSTEM_TIME です。 表にはこの期間が存在していなければなりません (SQLSTATE 4274M)。

BUSINESS_TIME 期間がドロップされると、その表に対するアプリケーション期間テンポラル表に従属するタイプを持つパッケージはすべて無効になります。 その表への従属関係が記録されているビューやトリガーなど、その他の従属オブジェクトも無効としてマークが付けられます。

表がシステム期間テンポラル表である場合、期間 SYSTEM_TIME はドロップできません (SQLSTATE 428HZ)。
DATA CAPTURE
データの複製に関する追加情報をログに記録するか否かを指定します。

表が型付き表である場合、 このオプションはサポートされません (ルート表の場合は SQLSTATE 428DH で、 他の副表の場合は 428DR)。

NONE
追加情報をログに記録しないことを指定します。
CHANGES
この表に対する SQL 変更についての追加情報をログに書き込むことを指定します。 このオプションは、表を複製する場合で、キャプチャー・プログラムを使用してログからこの表に対する変更内容をキャプチャーする場合に必須です。
INCLUDE LONGVAR COLUMNS
データ複製ユーティリティーが、LONG VARCHAR または LONG VARGRAPHIC 列に対する変更をキャプチャーするようにします。 この節は、LONG VARCHAR または LONG VARGRAPHIC 列のない表に指定することもできます。 これは、LONG VARCHAR または LONG VARGRAPHIC 列を含むよう、 表を ALTER することができるためです。
ACTIVATE NOT LOGGED INITIALLY
現行の作業単位の表の NOT LOGGED INITIALLY 属性をアクティブ化します。

このステートメントを使用して表を変更した後に、同一の作業単位内で 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 ステートメントでこの属性の説明を参照してください。

注: NOT LOGGED INITIALLY 属性がアクティブ化されている表に対してログに記録されないアクティビティーが発生し、ステートメントが失敗した (ロールバックの原因となった) 場合、または ROLLBACK TO SAVEPOINT が実行された場合、作業単位全体がロールバックされます (SQL1476N)。 さらに、NOT LOGGED INITIALLY 属性がアクティブ化されている表は、 ロールバックされた後にアクセス不能としてマークされ、ドロップしかできなくなります。 したがって、NOT LOGGED INITIALLY 属性がアクティブ化されている作業単位内では、エラーの可能性を最小限に抑えるべきです。
WITH EMPTY TABLE
現在表にあるすべてのデータを除去します。 一度データが除去されると、 RESTORE 機能を使用しなければ、そのデータの回復を行うことができません。 この ALTER ステートメントを発行した作業単位をロールバックしても、表データは元の状態には回復できません。

この処置が必要な場合、対象の表に定義された DELETE トリガーは行われません。 この表に存在するすべての索引の索引データも削除されます。

アタッチされたデータ・パーティションまたは論理的にデタッチされたパーティションを持つパーティション表は空にできません (SQLSTATE 42928)。

PCTFREE 整数
ロード または表再編成 操作中にフリー・スペースとして残される各ページのパーセンテージを指定します。 各ページの最初の行は、制約なしに追加されます。 ページに行が追加されると、integer % 以上のページがフリー・スペースとして残されます。 PCTFREE 値は、load および table reorg ユーティリティーでのみ考慮されます。 integer の値は 0 から 99 です。 システム・カタログ (SYSCAT.TABLES) の PCTFREE 値 -1 は、デフォルト値として解釈されます。 表ページのデフォルト PCTFREE 値は 0 です。 表が型付き表である場合、このオプションは、型付き表階層のルート表に対してのみサポートされます (SQLSTATE 428DR)。
LOCKSIZE
表へのアクセス時に使用されるロックのサイズ (細分性) を指定します。 表定義でこのオプションを使用しても、通常のロック・エスカレーションの発生を妨げることはありません。

表が型付き表である場合、このオプションは、型付き表階層のルート表に対してのみサポートされます (SQLSTATE 428DR)。

LOCKSIZE キーワードは、 カラム・オーガナイズ 表ではサポートされません (SQLSTATE 42858)。

ROW
行ロックの使用を指定します。 これは、表の作成時におけるデフォルトのロック・サイズです。
BLOCKINSERT
挿入操作時のブロック・ロックの使用を指定します。 これは、挿入の前にブロックに関して適切な排他ロックが取得され、挿入される行に関しては行ロックは行われないということを意味します。 このオプションは、別個のトランザクションが、表内の別個のセルに挿入を行う際に役立ちます。 同じセルへの挿入を行うトランザクションはやはり同時に挿入を行う可能性がありますが、それぞれに個別のブロックに対して挿入を行います。より多くのブロックが必要になる場合、これがセルのサイズに影響することもあります。 このオプションは、MDC 表に対してのみ有効です (SQLSTATE 42613)。
テーブル
表ロックの使用を指定します。 これは、適切な共有ロックまたは排他ロックが表で獲得されており、 意図ロック ("意図なし" は除く) が使用されないことを意味します。 パーティション表に関しては、このロック方針は、表ロックおよびデータ・パーティション・ロックの両方に、アクセスされるあらゆるデータ・パーティションについて適用されます。 この値を使用すると、獲得すべきロック数が限定されるため、照会のパフォーマンスが向上する可能性があります。 しかし、すべてのロックが表全体に対して獲得されるので、並行性も限定されます。
APPEND
データを表データの終わりに追加するか、またはデータ・ページの使用可能なフリー・スペースに追加するかを指定します。 表が型付き表である場合、このオプションは、型付き表階層のルート表に対してのみサポートされます (SQLSTATE 428DR)。
ON
表データが追加され、各ページのフリー・スペース情報は保持されません。 表にはクラスター索引があってはなりません (SQLSTATE 428CA)。
オフ
使用可能なスペースに表データを置くことを示します。 これは、表の作成時のデフォルト値です。

APPEND OFF を設定すると表が再編成されます。 使用可能なフリー・スペースに関する情報が正確でないため、 データ挿入時のパフォーマンスに悪影響を与える可能性があるからです。

VOLATILE CARDINALITY または NOT VOLATILE CARDINALITY
table-name のカーディナリティーが、実行時に大きく変化し得るのかどうかをオプティマイザーに知らせます。 揮発性は、表そのものに対してではなく、表の行数に適用されます。 CARDINALITY はオプショナル・キーワードです。 デフォルトは NOT VOLATILE です。
VOLATILE
table-name のカーディナリティーが、実行時に大きく変化し得る (空になることも大きくなることもある) ことを知らせます。 表にアクセスするために、オプティマイザーは、統計に関係なく、表のスキャンではなく索引のスキャンを使います。 ただし、その場合、その索引は索引専用である (参照されるすべての列がその索引内にある) か、 索引のスキャンで述部を適用できることが条件になります。 リスト・プリフェッチ・アクセス方式は、この表へのアクセスには使用されません。 表が型付き表である場合、このオプションは、型付き表階層のルート表に対してのみサポートされます (SQLSTATE 428DR)。
NOT VOLATILE
table-name のカーディナリティーが揮発性でないことを指定します。 この表へのアクセス・プランは、既存の統計と、現行の最適化レベルに基づいて続けられます。
COMPRESS
表の行にデータ圧縮を適用するかを指定します。
はい
行および XML の圧縮を有効にするように指定します。 表に対する挿入と更新の操作で、圧縮が行われるようになります。 索引圧縮は、CREATE INDEX ステートメントで明示的に使用不可にしない限りは、新しい索引で使用可能になります。 ALTER INDEX ステートメントを使用して、既存の索引を圧縮できます。
表が変更されて行圧縮が有効になったら、以下のいずれかのアクションを実行することで表のすべての行を即時に圧縮できます。
  • REORG コマンド
  • オンライン表移動
  • データのアンロードおよび再ロード
ADAPTIVE
表に対してアダプティブ圧縮を有効にします。 データ行は、 表レベルとページ・レベルの両方のコンプレッション・ディクショナリーによる圧縮の対象になります。 XML ストレージ・オブジェクト内 の XML 文書は、表レベルの XML コンプレッション・ディクショナリーによる圧縮の対象になります。 ページ・レベルのコンプレッション・ディクショナリーは、行が挿入または更新されると自動的に作成されます。 表レベルのコンプレッション・ディクショナリーは、 十分なデータが追加された後に、行データと XML データの両方に対して自動的に作成されます (コンプレッション・ディクショナリーが存在していない場合)。
STATIC
表に対してクラシック行圧縮を有効にします。 データ行は、 表レベルのコンプレッション・ディクショナリーによる圧縮の対象になり、XML ストレージ・オブジェクト内の XML 文書は、 表レベルの XML コンプレッション・ディクショナリーによる圧縮の対象になります。 行データの表レベル・コンプレッション・ディクショナリーも XML データの表レベルのコンプレッション・ディクショナリーも存在しない場合、それらは十分なデータが追加された後に自動的に作成されます。

前述の 2 つのオプションのいずれも COMPRESS YES 節に指定しない場合は、ADAPTIVE が暗黙的に使用されます。

いいえ
データ行および XML の圧縮を無効にするように指定します。 表に挿入および更新されたデータ行および XML 文書は、 圧縮されなくなります。 表内の既に圧縮形式になっている行および XML 文書は、 更新時に非圧縮形式に変換されるまで、圧縮のままです。

表のオフライン再編成を行うと、圧縮された状態の行はすべて解凍されます。

表レベルまたはページ・レベルのコンプレッション・ディクショナリーが存在する場合は、 表の再編成または切り捨て (LOAD REPLACE 操作など) の際に廃棄されます。 索引圧縮は、表に対して新しく作成された索引に関しては無効になります (ただし、CREATE INDEX ステートメントで明示的に有効にした場合は除きます)。 ALTER INDEX ステートメントを使用して、既存の索引に関する索引圧縮を明示的に使用不可にできます。

VALUE COMPRESSION
使用される行形式を判別します。 それぞれのデータ・タイプは、使用される行形式に応じた、異なるバイト・カウントを持ちます。 詳しくは、 CREATE TABLE ステートメントの「 バイト・カウント 」を参照してください。 更新操作により、既存の行を新しい行形式に変更します。

既存の行の更新操作のパフォーマンスを向上させるには、オフラインでの表再編成をお勧めします。 これにより、表のスペース所要量も削減できます。

データ・タイプ別の列のバイト・カウント (CREATE TABLEを参照) の適切な列を使用して計算された行サイズが、表 各表スペースのページ・サイズの列数と行サイズの制限に示されている行サイズ制限内に収まらなくなった場合は、エラーが返されます (SQLSTATE 54010)。 表が型付き表である場合、このオプションは、型付き表階層のルート表に対してのみサポートされます (SQLSTATE 428DR)。

ACTIVATE
NULL 値は 3 バイトを使用して保管されます。 これは、VALUE COMPRESSION がアクティブでない場合の、すべてのデータ・タイプの列と同じスペース、またはそれより少ないスペースです (ただし CHAR(1) を除きます)。 列が NULL 可能として定義されているかいないかは、行サイズ計算には影響しません。 データ・タイプが VARCHAR、VARGRAPHIC、VARBINARY、CLOB、DBCLOB、または BLOB である列の、長さがゼロのデータ値は、2 バイトだけ使用して保管されます。これは、VALUE COMPRESSION がアクティブでない場合に必要とされるストレージを下回ります。 COMPRESS SYSTEM DEFAULT オプションを使用して列を定義すると、列のシステム・デフォルト値も 合計 3 バイトのストレージを使用して保管できるようになります。 これをサポートする行形式は、各データ・タイプのバイト・カウントを決定し、NULL、長さがゼロの値、またはシステム・デフォルト値への更新、またはそれらの値からの更新を行う際に、データ・フラグメントの原因となる傾向があります。
DEACTIVATE
NULL 値は、今後の更新のために確保されたスペースと一緒に保管されます。 このスペースは、可変長の列のためには確保されません。 またそのようにすると、列のシステム・デフォルト値のストレージを効率的にサポートしません。 列が COMPRESS SYSTEM DEFAULT 属性を有していると、警告が出されます (SQLSTATE 01648)。
LOG INDEX BUILD
この表で索引の作成、再作成、または再編成の操作を行う際に実行されるロギングのレベルを指定します。
ヌル
logindexbuildデータベース構成パラメーターの値を使用して、索引作成操作をログに記録するかどうかを決定することを指定します。 これは、表が作成されるときのデフォルトです。
オフ
この表での索引作成操作が最小限ログに記録されることを指定します。 この値は、 logindexbuild データベース構成パラメーターの設定をオーバーライドします。
ON
この表での索引作成操作が完全にログに記録されることを指定します。 この値は、 logindexbuild データベース構成パラメーターの設定をオーバーライドします。
ADD PARTITION パーティションの追加
パーティション表に 1 つ以上のデータ・パーティションを追加します。 指定された表がパーティション表でない場合、エラーが戻されます (SQLSTATE 428FT)。 データ・パーティションの数は、32 767 を超えてはなりません。
partition-name
データ・パーティションの名前を指定します。 この名前は、表の他のいずれのデータ・パーティションとも同じであってはなりません (SQLSTATE 42710)。 この節を指定しない場合は、「PART」の後に文字形式の整数値が付いた名前になります (このようにして、その表での固有の名前になります)。
boundary-spec
新規のデータ・パーティションの値の範囲を指定します。 この範囲は、既存のデータ・パーティションの範囲と重なり合ってはなりません (SQLSTATE 56016)。 starting-clause および ending-clause の説明については、 CREATE TABLE を参照してください。

starting-clause が省略されると、新規のデータ・パーティションは、表の末尾に入るものと想定されます。 ending-clause が省略されると、新規のデータ・パーティションは、表の先頭に入るものと想定されます。

IN 表スペース名
データ・パーティションが保管される表スペースを指定します。 指定する表スペースは、パーティション表の他の表スペースと同じページ・サイズ、同じデータベース・パーティション・グループ、同じスペース管理方式でなければなりません (SQLSTATE 42838)。 これは、同じ表の他のデータ・パーティションに既に使用されている表スペース、あるいは、この表によって使用されていない表スペースとすることもできます。しかし、ステートメントの許可 ID には、その表スペースに対する USE 特権が必要です (SQLSTATE 42727)。 この節が指定されなかった場合、表のデータ・パーティションのうち、最初の可視パーティションまたはアタッチされたパーティションの表スペースが使用されます。
INDEX IN 表スペース名
データ・パーティション上のパーティション索引が保管される表スペースを指定します。 INDEX IN 節を指定しない場合は、データ・パーティション上のパーティション索引は、データ・パーティションと同じ表スペースに保管されます。

新規の索引パーティションで使用される表スペースは、デフォルトであっても INDEX IN 節で指定されていても、他のすべての索引パーティションで使用される表スペースのタイプ (SMS または DMS)、ページ・サイズ、およびエクステント・サイズと一致していなければなりません (SQLSTATE 42838)。

tablespace-name 内の LONG
長い列データを含むデータ・パーティションが保管される表スペースを指定します。 指定する表スペースは、パーティション表の他の表スペースおよびデータ・パーティションと同じページ・サイズ、同じデータベース・パーティション・グループ、同じスペース管理方式でなければなりません (SQLSTATE 42838)。ステートメントの許可 ID には、その表スペースに対する USE 特権が必要です。 指定した表スペースのページ・サイズおよびエクステント・サイズは、パーティション表の他のデータ・パーティションのページ・サイズおよびエクステント・サイズと異なる可能性があります。

パーティション表での LONG IN 節の使用に関する規則については、 『パーティション表でのラージ・オブジェクトの動作』を参照してください。

ATTACH PARTITION attach-partition
他の表を新規のデータ・パーティションとしてアタッチします。 アタッチされる表のデータ・オブジェクトは、アタッチ先の表の新規パーティションになります。 データ移動は一切ありません。 表は SET INTEGRITY ペンディング状態となり、参照整合性検査は、SET INTEGRITY ステートメントの実行まで据え置かれます。 ALTER TABLE のアタッチ操作では、IN 節または LONG IN 節を使用することはできません。 そのデータ・パーティションの LOB の配置は、ソース表の作成時に決定されます。 パーティション表での LONG IN 節の使用に関する規則については、 『パーティション表でのラージ・オブジェクトの動作』を参照してください。

アタッチされる表で、行レベルのアクセス制御または列レベルのアクセス制御のいずれかがアクティブになっている場合、アタッチ先の表の同じ制御をアクティブにする必要があります。 行権限や列マスクは、アタッチされる表からターゲット表に自動的に引き継がれるわけではありません。 列マスクおよび行権限は、必ずしも両方の表で同じである必要はありません。ただし、セキュリティーの観点では、同じであるのが最善です。 しかし、アタッチされる表の行レベルのアクセス制御がアクティブになっている場合には、アタッチ先の表でも行レベルのアクセス制御をアクティブにする必要があります (SQLSTATE 428GE)。 同様に、アタッチする表の列レベルのアクセス制御がアクティブになっており、少なくとも 1 つの列マスク・オブジェクトが使用可能になっている場合には、アタッチ先の表でも列レベルのアクセス制御をアクティブにし、対応する列の列マスク・オブジェクトを使用可能にする必要があります (SQLSTATE 428GE)。

partition-name
データ・パーティションの名前を指定します。 この名前は、表の他のいずれのデータ・パーティションとも同じであってはなりません (SQLSTATE 42710)。 この節を指定しない場合は、「PART」の後に文字形式の整数値が付いた名前になります (このようにして、その表での固有の名前になります)。
boundary-spec
新規のデータ・パーティションの値の範囲を指定します。 この範囲は、既存のデータ・パーティションの範囲と重なり合ってはなりません (SQLSTATE 56016)。 starting-clause および ending-clause の説明については、 CREATE TABLE を参照してください。

starting-clause が省略されると、新規のデータ・パーティションは、表の末尾に入るものと想定されます。 ending-clause が省略されると、新規のデータ・パーティションは、表の先頭に入るものと想定されます。

FROM table-name1
新規パーティションのデータのソースとして使用する表を指定します。 table-name1 の表定義は、複数のデータ・パーティションを持つことができず、以下の形で、変更される表と一致していなくてはなりません (SQLSTATE 428GE)。
  • 列数が同じ。
  • 表内の同じ位置 (順に並べた時の同じ位置) にある列のデータ・タイプが同じ。
  • 表内の同じ位置 (順に並べた時の同じ位置) にある列の NULL 可能特性が同じ。
  • ターゲット表に行変更タイム・スタンプ列がある場合、それに対応するソース表の列は、行変更タイム・スタンプ列でなければなりません。
  • データも分散される場合は、同じ分散キーを使用して、同じデータベース・パーティション・グループに分散される必要があります。
  • いずれかの表が生成別ランダム方式を使用するランダム分散表である場合、もう一方の表もそうでなければなりません。
  • いずれかの表のデータが編成されている場合は、編成が一致する。
  • 構造化、XML、または LOB データ・タイプの場合、INLINE LENGTH の値が同じ。
  • ターゲット表に BUSINESS_TIME 期間が定義されている場合、ソース表の対応する列に対して BUSINESS_TIME 期間が定義されていなければなりません。
table-name1 のデータが正しくアタッチされた後は、DROP TABLE table-name1 と同等の操作が実行され、この表はデータを持たなくなり、データベースから削除されます。
BUILD MISSING INDEXES
ターゲット表上のパーティション索引に対応する索引がソース表にない場合、SET INTEGRITY 操作により、既存のデータ・パーティション上のパーティション索引に対応する新規データ・パーティション上のパーティション索引を構築することを指定します。 ターゲット表上のパーティション索引と一致しないソース表上の索引は、アタッチ処理中にドロップされます。
REQUIRE MATCHING INDEXES
ターゲット表上のパーティション索引と一致する索引がソース表になければならないことを指定します。これがない場合、エラーが戻され (SQLSTATE 428GE)、一致しない索引に関する情報が管理ログに書き込まれます。
REQUIRE MATCHING INDEXES 節が指定されておらず、ソース表上の索引がターゲット表上のすべてのパーティション索引と一致しない場合は、以下の動作が発生します。
  1. 一致する索引がソース表上になく、ユニーク索引であるかまたは REJECT INVALID VALUES を使用して定義されている XML 索引であるターゲット表上の索引の場合は、アタッチ操作が失敗します (SQLSTATE 428GE)。
  2. ソース表に一致する索引がない、ターゲット表上の他のすべての索引の場合、アタッチ操作中にソース表上の索引オブジェクトに無効のマークが付けられます。 ソース表に索引がない場合は、空の索引オブジェクトが作成され、無効としてマークが付けられます。 アタッチ操作は正常に実行されますが、新規データ・パーティション上の索引オブジェクトは無効としてマークが付けられます。 通常、データ・パーティションに対して次に実行される操作は SET INTEGRITY です。 SET INTEGRITY は、必要に応じて、最近アタッチしたデータ・パーティション上に索引オブジェクトを強制的に再構築します。 索引の再構築により、新規データをオンラインにするのに必要な時間が長くなることがあります。
  3. 一致しない索引に関する情報が、管理ログに書き込まれます。
DETACH PARTITION パーティション名 INTO table-name1
変更される表からデータ・パーティション partition-name をデタッチし、そのデータ・パーティションを使用して、table-name1 という名前の新規表を作成します。 このデータ・パーティションは変更される表からデタッチされ、これを使用してデータ移動なしで新規表が作成されます。 変更される表の最後に残ったデータ・パーティションを指定することはできません (SQLSTATE 428G2)。 変更してパーティションをデタッチする表が、システム期間テンポラル表であってはなりません (SQLSTATE 428HZ)。

行レベルのアクセス制御または列レベルのアクセス制御のいずれかが定義されている表からパーティションがデタッチされる場合、デタッチされるデータに関して作成される新しい表では、自動的に行レベルのアクセス制御がアクティブになり (列レベルのアクセス制御はアクティブになりません)、デタッチされたデータが保護されます。 この新しい表に対して適切な行権限を定義するか、表の行レベルのアクセス制御を非アクティブにするまで、この表に直接アクセスしても行は返されません。

ADD SECURITY POLICY ポリシー名
セキュリティー・ポリシーを表に追加します。 セキュリティー・ポリシーは、現行サーバーに存在するものでなければなりません (SQLSTATE 42704)。 表に既存のセキュリティー・ポリシーがあってはなりません (SQLSTATE 55065)。また、型付き表 (SQLSTATE 428DH)、マテリアライズ照会表 (MQT)、またはステージング表 (SQLSTATE 428FG) であってはなりません。 この節によって、行の保護または列の保護がアクティブになるわけではありません。 詳しくは、 LBAC を使用したデータの保護を参照してください。
DROP SECURITY POLICY
表からセキュリティー・ポリシーと、すべての LBAC 保護を削除します。 table-name によって指定される表は、セキュリティー・ポリシーによって保護される必要があります (SQLSTATE 428GT)。 表に、DB2SECURITYLABEL データ・タイプの列があれば、そのデータ・タイプは VARCHAR (128) FOR BIT DATA に変更されます。 表に保護された列が 1 つ以上あれば、それらの列は無保護になります。
バージョン管理使用履歴表 history-table-name を追加します
これを指定すると、表はシステム期間テンポラル表になります。 この表は、既にシステム期間テンポラル表または履歴表として 定義されているものであってはなりません (SQLSTATE 428HM)。 SYSTEM_TIME 期間とトランザクション開始 ID 列を表に定義する必要があります (SQLSTATE 428HM)。

マテリアライズ照会表を使用することはできません (SQLSTATE 428HM)。

この表の行の履歴バージョンは、データベース・マネージャーによって保持されます。 データベース・マネージャーは、行が表に挿入された時期とそれが更新または削除された時期を示す追加情報を記録します。 システム期間テンポラル表の行が更新されると、その行の直前のバージョンが保持されます。 システム期間テンポラル表のデータが削除されると、その行の古いバージョンが履歴レコードとして挿入されます。 表の履歴行を格納するために、関連付けられた履歴表が使用されます。

この表に対する参照には、データのどのシステム・バージョンを返すかを示す期間検索条件を含めることができます。

history-table-name は、システム期間テンポラル表の履歴行を保持する履歴表を指定します。 history-table-name は、現行サーバーに存在する表を指定するものでなければならず (SQLSTATE 42704)、 カタログ表ではなく (SQLSTATE 42832)、既存のシステム期間テンポラル表、既存の履歴表、宣言済みのグローバル一時表、作成済みのグローバル一時表、マテリアライズ照会表、ビューのいずれでもありません (SQLSTATE 428HX)。

指定する履歴表に、ID 列、行変更タイム・スタンプ列、行開始列、 行終了列、トランザクション開始 ID 列、生成式列が含まれていたり、 期間が含まれていてはなりません (SQLSTATE 428HX)。

システム期間テンポラル表と、指定した履歴表の間では、列の数と順序が同じでなければなりません (SQLSTATE 428HX)。 2 つの表における対応する列の以下の属性は、同じでなければなりません (SQLSTATE 428HX)。
  • 列名
  • 列データ・タイプ
  • 列の長さ (インライン LOB の長さを含む)、精度、およびスケール
  • 列の FOR BIT 属性 (文字ストリング列の場合)
  • 列の NULL 属性
  • 列の隠し属性

行アクセス制御または列アクセス制御がシステム期間テンポラル表においてアクティブであるが、行アクセス制御が履歴表でアクティブでない場合、データベース・マネージャーは自動的に、履歴表での行アクセス制御をアクティブにし、デフォルトの行権限を履歴表に作成します。

DROP VERSIONING
これを指定すると、表はシステム期間テンポラル表ではなくなります。 表はシステム期間テンポラル表でなければなりません (SQLSTATE 428HZ)。 この表では、履歴データの記録と保守が行われなくなります。 列の定義および表のデータは変更されませんが、表はシステム期間テンポラル表としては扱われません。 期間 SYSTEM_TIME は保持されます。 これ以降、この表を参照する照会では、表の SYSTEM_TIME 期間指定を指定することはできません。 システム期間テンポラル表と、関連する履歴表との関係は解除されます。 履歴表はドロップされず、履歴表の内容は影響を受けません。

DROP VERSIONING を指定して表を変更すると、その表におけるシステム期間テンポラル表に従属するタイプのパッケージはすべて無効になります。 その表への従属関係が記録されているビューやトリガーなど、その他の従属オブジェクトも無効としてマークが付けられます。

ルール

  • 表に対して定義された強制適用されるユニーク・キー制約または主キー制約は、分散キー (存在する場合) のスーパーセットである必要があります (SQLSTATE 42997)。
  • 主キーまたはユニーク・キーは、ディメンションのサブセットにはなりません (SQLSTATE 429BE)。
  • 1 つの列の参照は、1 つの ALTER TABLE ステートメント内の 1 つの ADD、ALTER または DROP COLUMN 節でのみ可能です (SQLSTATE 42711)。
  • 表にその表に従属するマテリアライズ照会表がある場合は、列の長さ、データ・タイプ、または隠し属性を変更することも、列をドロップすることもできません (SQLSTATE 42997)。
  • 表にその表に従属するビューがあり、ビューが照会最適化に対して使用可能になっている場合、 列の長さを変更することはできません (SQLSTATE 42997)。
  • 以下の操作を行う前に、OFF オプションを指定した SET INTEGRITY ステートメントを使用して、 表を SET INTEGRITY ペンディング状態にする必要があります (SQLSTATE 55019)。
    • 生成式を使って列を追加する
    • 列の生成式を変更する
    • 生成式を持つよう、列を変更する
  • 既存の列は DB2SECURITYLABEL タイプとなるよう変更することはできません (SQLSTATE 42837)。
  • 表にセキュリティー・ポリシーが関連付けられていなければ、DB2SECURITYLABEL タイプの列の定義は失敗します (SQLSTATE 55064)。
  • DB2SECURITYLABEL タイプの列は、変更またはドロップできません (SQLSTATE 42817)。
  • 表に保護のマークを付ける ALTER TABLE 操作は、その表に従属する MQT が存在する場合に失敗します (SQLSTATE 55067)。
  • 保護されたパーティション表にパーティションをアタッチしようとしても、ソース表とターゲット表が同じセキュリティー・ポリシーで保護されておらず、同じ行セキュリティー・ラベル列を持たず、同じ保護列セットを持っていない場合は失敗します (SQLSTATE 428GE)。
  • 生成される列が表パーティション・キーで参照される場合、生成される列の式は変更できません (SQLSTATE 42837)。
  • isolation-clause は、materialized-query-definitionfullselect に指定できません (SQLSTATE 42601)。
  • 非同期索引クリーンアップによるパーティションの索引エントリーの削除が完了していない場合、パーティションをデタッチした後に、パーティション表に同じデータ・パーティション名を追加またはアタッチすると、SQL0612N で失敗します (SQLSTATE 42711)。

  • ALTER TABLE ステートメントを行った結果、その変更が既存のデータの行フォーマットに影響する場合に、REORG 推奨操作 が発生したと見なされます。 これが発生すると、 表の再編成操作 が正常に完了するまで、表に対する後続のほとんどの操作は制限されます (SQLSTATE 57007)。 単一の作業単位の中で、同じステートメント内または複数のステートメントにまたがって多くの REORG 推奨 ALTER TABLE アクションが 1 つの表に対して実行される可能性もあります。 この場合は、単一の REORG 推奨操作であると見なされます。 例えば、同じ作業単位の中で単一の ALTER TABLE ステートメントまたは 2 つのステートメントで 2 つの列をドロップする操作は、単一の REORG 推奨操作であると見なされます。 REORG 推奨操作が含まれる作業単位は 3 つまでは許容されますが、さらにそのような操作を行うには、その前に従来のオフラインでの表の再編成を行う必要があります (SQLTATE 55019)。 REORG ペンディング状態と REORG 推奨操作数はそれぞれ、SYSIBMADM.ADMINTABINFO 列の reorg_pending と num_reorg_rec_alters で返されます。
  • REORG 推奨の全 ALTER ステートメントを以下のリストにまとめます。どの場合もバージョン変更が起こり、表が REORG ペンディング状態になります。
    • DROP COLUMN
    • ALTER COLUMN SET NOT NULL
    • ALTER COLUMN DROP NOT NULL
    • ALTER COLUMN SET DATA TYPE。ただし、以下の場合を除きます。
      • VARCHAR 列または VARGRAPHIC 列の長さの増加
      • 既存のデータから末尾ブランクを切り捨てずに、VARCHAR 列または VARGRAPHIC 列の長さを短くする操作 (その列に索引が存在しない場合)
  • 表をマテリアライズ照会表に変更すると、この表は SET INTEGRITY ペンディング状態になります。 表が REFRESH IMMEDIATE として定義されている場合は、 表の SET INTEGRITY ペンディング状態を解除しない限り、全選択で参照されている表に対する INSERT、DELETE、または UPDATE コマンドを開始することはできません。 IMMEDIATE CHECKED オプションを指定して REFRESH TABLE または SET INTEGRITY を使用することで、 表の SET INTEGRITY ペンディング状態を解除し、全選択に基づいて表内のデータを完全にリフレッシュできます。 表にあるデータが完全に全選択の結果を反映する場合、 SET INTEGRITY の IMMEDIATE UNCHECKED オプションを使用して、 表の SET INTEGRITY ペンディング状態を解除できます。
  • 表を変更して REFRESH IMMEDIATE マテリアライズ照会表にすると、 全選択により参照される表に対して INSERT、DELETE、または UPDATE を使用するパッケージはどれも無効になります。
  • 表をマテリアライズ照会表から正規表に変更すると、 表に関連するパッケージはどれも無効になります。
  • 表を MAINTAINED BY FEDERATED_TOOL マテリアライズ照会表から正規表に変更しても、 レプリケーション・ツールのサブスクリプション・セットアップには変更は生じません。 MAINTAINED BY SYSTEM マテリアライズ照会表に対する以降の変更は、レプリケーション・ツールが失敗する原因となるので、MAINTAINED BY FEDERATED_TOOL マテリアライズ照会表の変更の際には、サブスクリプション設定を変更する必要があります。
  • 据え置かれたマテリアライズ照会表がステージング表に関連付けられる場合、マテリアライズ照会表が正規表に変更されると、ステージング表はドロップされます。
  • ADD COLUMN 節は、他のいずれの節よりも先に処理されます。 他の節は、指定された順序で処理されます。
  • 表変更操作によって追加される列は、表の既存のビューに自動的に追加されることはありません。
  • データ・パーティションのパーティション表への追加またはアタッチ、あるいはパーティション表からのデータ・パーティションのデタッチを行うと、表に従属するあらゆるパッケージが無効になります。
  • データ・パーティション表からデータ・パーティションをデタッチした後、SYSCAT.DATAPARTITIONS カタログ内のデタッチされたパーティションの STATUS が「L」になることがあります。これは、パーティションが論理的にデタッチされていてもデタッチ操作が完了していない場合に起こります。 デタッチされたパーティションの STATUS が「L」の場合は、ソース表に対して以下の操作を実行することはできません (SQLSTATE 55057)。
    • 非パーティション索引の作成が試みられるユニーク・キー制約または主キー制約の追加。
    • 列の追加、ドロップ、または名前変更。
    • 値の圧縮または圧縮のアクティブ化。
    • 値の圧縮または圧縮の非活動化。
  • 表についてのパーティションをドロップするには、表をドロップした上で再作成する必要があります。
  • 表についての編成をドロップするには、表をドロップした上で再作成する必要があります。
  • ユニーク・キー制約または主キー制約に関して索引が自動的に作成される場合、 データベース・マネージャーは、 指定された制約名を表のスキーマ名と一致するスキーマ名を伴う索引名として使用することを試みます。 この名前が既存の索引名と一致する場合、または制約の名前が指定されなかった場合、 索引は SYSIBM スキーマに作成され、 "SQL" とタイム・スタンプに基づいて生成される一連の 15 個の数字からなるシステム生成の名前が付けられます。
  • アタッチされたデータ・パーティションを伴うパーティション表上に非パーティション索引が作成される場合、索引には、アタッチされたデータ・パーティションのデータは含まれません。 すべてのアタッチされたデータ・パーティションに対応する全索引を維持するには、SET INTEGRITY ステートメントを使用します。
  • アタッチされたデータ・パーティションがある場合に (SYSCAT.DATAPARTITIONS 内の STATUS が「A」) パーティション索引を作成する際には、アタッチされたデータ・パーティションごとに索引パーティションも作成されます。 パーティション索引をユニークとして作成する場合や、パーティション索引が REJECT INVALID VALUES を指定して作成する XML 索引である場合は、アタッチされたデータ・パーティションに違反 (ユニーク索引の場合は重複、XML 索引の場合は無効値) が含まれていると、索引の作成に失敗することがあります。
  • 表に非パーティション索引がある場合、排他モードでロックされている表が、対象のパーティションを作成した追加操作またはアタッチ操作と同じトランザクションにないと、そのトランザクション内にある表の新規データ・パーティションにアクセスできません (SQLSTATE 57007)。
  • 表 T に対する DELETE 操作に関与する可能性のある表は、T に対して 連結削除されていると言われます。 したがって、表が T の従属表である場合、または T カスケードから削除される表の従属表である場合、その表は T に連結削除されます。
  • パッケージに表 T での挿入 (更新/削除) 使用があるとは、パッケージ内のステートメントによって直接的に、あるいは、そのいずれかのステートメントの代わりにパッケージによって実行される制約やトリガーによって間接的に、レコードが T に挿入 (更新または削除) されることです。 同様に、パッケージに更新使用があるとは、パッケージ内のステートメントによって直接的に、あるいは、そのいずれかのステートメントの代わりにパッケージによって実行される制約やトリガーによって間接的に、列が変更されることです。
  • フェデレーテッド・システムでは、透過 DDL を使用して作成されたリモート基本表は変更できます。 ただし、可能な変更に関して、 透過 DDL には以下のようないくつかの制限があります。
    • リモート基本表は、新規の列の追加か、または主キーの指定によってのみ、変更できます。
    • 透過 DDL によってサポートされる節には、具体的には以下のものがあります。
      • ADD COLUMN 列定義
      • column-options 節の中の NOT NULL と PRIMARY KEY
      • ADD unique-constraint (PRIMARY KEY のみ)
    • リモート基本表内の既存の列には、コメントを指定できません。
    • リモート基本表内の既存の主キーは、変更またはドロップできません。
    • リモート基本表を変更すると、そのリモート基本表に関連付けられたニックネームに依存するパッケージはすべて無効になります。
    • リモート・データ・ソースは、ALTER TABLE ステートメントを通じて要求された変更をサポートする必要があります。 データ・ソースの、サポートしていない要求への応答方法によって、 エラーが戻されるか、または要求が無視される可能性があります。
    • 透過 DDL を使用して作成されたのではないリモート基本表を変更しようとすると、エラーが返されます。
  • 主キー、ユニーク・キー、外部キーに対する変更は、明示的か暗黙的かを問わず、パッケージや索引、他の外部キーに以下の影響を与える可能性があります。
    表 4. キーの変更、およびその変更がパッケージや索引、他の外部キーに与える影響
    アクション パッケージや索引、他の外部キーに与える影響
    主キーやユニーク・キーを追加する パッケージ、外部キー、または既存のユニーク・キーに影響はありません。 (主キーまたはユニーク・キーが、前のバージョンで作成された既存のユニーク索引を使用していて、 固有性の据え置きをサポートするように変換されていない場合、索引は変換され、 関連した表の更新を行うパッケージは無効になります。)
    主キーやユニーク・キーをドロップする
    • 制約に関してその索引が自動的に作成されていた場合には、その索引はドロップされます。 索引に従属しているパッケージはすべて無効になります。
    • 索引が制約に関してユニークであるように変換されており、 現在システムが索引に関してユニークであることを必要としていない場合、索引は非ユニークに戻されます。 索引に従属しているパッケージはすべて無効になります。
    • 索引が制約のために使用された既存のユニーク索引だった場合、索引はシステムが必要としていないことを示すよう設定されます。 パッケージに影響はありません。
    • 表の主キー制約またはユニーク制約は、それが最後に強制適用される主キー制約またはユニーク制約であり、その列セットが関連シャドー表の選択リストに含まれる場合は、ドロップすることができません。
    • 主キー制約またはユニーク制約は、表に関連シャドー表があり、ドロップされる制約に関連シャドー表の主キーが依存している場合は、ドロップすることができません。
    • すべての従属外部キーはドロップされます。 すべての従属外部キーについて、追加の操作が実行されます (次の行を参照)。
    外部キーを追加する、ドロップする、NOT ENFORCED から ENFORCED に変更する、または ENFORCED から NOT ENFORCED に変更する
    • オブジェクト表に対して挿入を行うパッケージは、すべて無効になります。
    • 外部キーの少なくとも 1 つの列に対して更新を行うパッケージは、すべて無効になります。
    • 親表の削除を行うパッケージはすべて無効になります。
    • 親キーの少なくとも 1 つの列に対して更新を行うパッケージは、すべて無効になります。
    外部キーまたは機能従属関係を ENABLE QUERY OPTIMIZATION から DISABLE QUERY OPTIMIZATION に変更する 最適化のための制約と従属関係にあるパッケージすべては、無効です。
  • 表に列を追加すると、変更された表に対して挿入を行うパッケージはすべて無効になります。 追加された列が、表内の最初のユーザー定義構造化タイプ列である場合、変更された表で DELETE を行うパッケージも無効になります。
  • SET INTEGRITY ペンディング状態ではない既存の表に対してチェック制約または参照制約を追加するか、または SET INTEGRITY ペンディング状態にない既存の表の既存のチェック制約か参照制約を NOT ENFORCED から ENFORCED に変更すると、その表の既存の行は、制約に関して直ちに評価されます。 検証に失敗すると、エラーが戻されます (SQLSTATE 23512)。 表が SET INTEGRITY ペンディング状態の場合は、チェック制約または参照制約を追加しても、 または制約を NOT ENFORCED から ENFORCED に変更しても、制約が直ちに適用されるわけではありません。 制約の適用を開始するには、IMMEDIATE CHECKED オプションを付けて SET INTEGRITY ステートメントを発行します。
  • チェック制約の追加、変更、またはドロップを行うと、オブジェクト表に対する挿入、 制約に関係している 1 つ以上の列に対する更新、 パフォーマンス向上のために制約を使用する SELECT の使用を含むすべてのパッケージが無効になります。
  • 分散キーを追加すると、分散キーの少なくとも 1 つの列に対して更新を行うパッケージは、すべて無効になります。
  • デフォルトで定義された分散キーは、主キーをドロップして別の主キーを追加しても影響を受けません。
  • 列をドロップするか、そのデータ・タイプを変更すると、変更される表からすべての RUNSTATS 情報が除去されます。 表に再びアクセスできるようになったら、表に対して RUNSTATS を実行する必要があります。 表の統計プロファイルは、表に明示的にドロップされた列が含まれていない場合には、保持されます。
  • 列を変更する (長さ、データ・タイプ、NULL 可能性、または隠し属性を変更する) か、列をドロップすると、その表を (直接的に、あるいは参照制約やトリガーによって間接的に) 参照するすべてのパッケージが無効になります。
  • 列を変更する (長さ、データ・タイプ、NULL 可能性、または隠し属性を変更する) と、その表に従属するビュー (型付きビューを除く) が再生成されます。 そうしたビューの再生成時に問題が生じると、エラーが戻されます (SQLSTATE 56098)。 表に従属する型付きビューは、作動不能としてマークされます。
  • 列を変更する (長さ、データ・タイプ、または隠し属性を変更する) と、従属するトリガーおよび SQL 関数はすべて無効とマークされます。これらは次回の使用時に暗黙的に再コンパイルされます。 そうしたオブジェクトの再生成時に問題が生じると、エラーが戻されます (SQLSTATE 56098)。
  • 列を変更する (長さ、データ・タイプ、または NULL 可能属性を変更する) と、トリガーや SQL 関数を伴うステートメントの準備またはバインドの際、トリガーや SQL 関数の処理中にエラーが発生する可能性があります (SQLSTATE 54010)。 このことは、遷移変数および遷移表列の長さの合計に基づく行のサイズが長すぎる場合に生じる可能性があります。 このようなトリガーまたは SQL 関数がドロップされると、 それ以降にそれを再作成しようとしてもエラーが戻されます (SQLSTATE 54040)。
  • このフィックスパックおよび以後のフィックスパックまたはリリースで導入された新しい表列を追加するには、旧バージョンで作成された WLM アクティビティー・イベント・モニターをドロップして再作成する必要があります。
  • 構造化タイプ列または XML タイプ列を変更してインライン長を長くすると、 参照制約またはトリガーによって直接または間接的に表を参照するパッケージはすべて無効になります。
  • 構造化タイプ列または XML タイプ列を変更してインライン長を長くすると、表に従属するビューは再生成されます。
  • コンプレッション・ディクショナリーは、XML 列が表に追加された場合または Online Table Move を使用して表がマイグレーションされた場合のみ、表の XML ストレージ・オブジェクトに対して作成できます。
  • 表の LOCKSIZE を変更すると、変更された表に従属するすべてのパッケージは無効になります。
  • VOLATILE または NOT VOLATILE CARDINALITY を変更すると、 変更された表に従属するすべての動的 SQL ステートメントは無効になります。
  • レプリケーション: 列の長さを増やす時や、列のデータ・タイプを変更する際には十分に注意してください。 アプリケーション表と関連付けられた変更データ表は、既に行サイズの限界近くに設定されている可能性があります。 変更データ表をアプリケーション表よりも前に変更するか、 この 2 つの表を同じ作業単位内で変更にして、 両方の表の変更を完了できるようにしてください。 コピーについても考慮すべき点があります。これも、行サイズの限界近くに設定されていたり、 既存の列の長さを長くする機能のないプラットフォームに存在している可能性があります。

    属性を変更したログ・レコードをキャプチャー・プログラムが処理する前に、 変更データ表を変更していなければ、キャプチャー・プログラムが失敗する場合があります。 コピーを保持しているサブスクリプションを実行する前に、変更対象の列が含まれるコピーを変更していなければ、そのサブスクリプションは失敗する可能性があります。

  • パーティションを保護表からデタッチする際、データベース・サーバーによって自動的に作成されるターゲット表は、ソース表と同じ方法で保護されます。
  • 表を、行レベルの細分度で保護されるよう変更すると、そうした表に従属するキャッシュ動的 SQL セクションはすべて無効にされます。 同様に、そうした表に従属するパッケージも無効にされます。
  • 表 T の列を、保護列になるよう変更すると、表 T に従属するキャッシュ動的 SQL セクションはすべて無効にされます。 同様に、表 T に従属するパッケージも無効にされます。
  • 表 T の列を、非保護列になるよう変更すると、表 T に従属するキャッシュ動的 SQL セクションはすべて無効にされます。 同様に、表 T に従属するパッケージも無効にされます。
  • 表内の既存の行に関し、セキュリティー・ラベル列の値は、行セキュリティー・ラベル列を追加する ALTER ステートメントの実行時に、デフォルトである、セッション許可 ID の書き込みアクセス権限に対応するセキュリティー・ラベルになります。
  • マテリアライズ照会の追加: 基本表がマテリアライズ照会表になるように変更されるとき、ラベル・ベースのアクセス制御セキュリティー属性 (セキュリティー・ポリシー、列セキュリティー・ラベル、行セキュリティー・ラベル列) は、新しいマテリアライズ照会表の作成時と同じ方法で派生します。 変更される基本表に、ラベル・ベースのアクセス制御セキュリティー属性が既にある場合、これらの属性は派生プロセスで次のように考慮されます。
    • 列のアクセス制御: 列に関する既存のセキュリティー・ラベルは、マテリアライズ照会表を定義している照会から派生する、対応するセキュリティー・ラベルと共に集約されます。
    • 行のアクセス制御: 行のアクセス制御属性は、新しいマテリアライズ照会表の場合とまったく同じ方法でセットアップされます。
  • Db2 バージョン 9.7 フィックスパック 1 以降のリリースでは、新しいマルチディメンション・クラスタリング (MDC) 表のブロック索引がパーティション化されます。 データ・パーティション化マルチディメンション・クラスタリング (MDC) 表にデータ・パーティションを追加すると、新しいパーティションに対応する空の索引パーティション (MDC ブロック索引を含む) が作成されます。 さらに、MDC ブロック索引ごと、およびパーティション索引ごとに、新しい索引パーティション・エントリーが SYSCAT.SYSINDEXPARTITIONS に追加されます。
  • Db2 V9.7 フィックスパック 1 以降のリリースで作成されたパーティション MDC 表にデータ・パーティションをアタッチする場合、 attach-partition で指定されるソース表は、非パーティション MDC 表または単一パーティションのパーティション MDC 表にすることができます。
    • ソース表が非パーティション表の場合: ソース表の MDC ブロック索引が継承され、ATTACH 操作完了後に新しいパーティションのパーティション MDC 索引になります。
    • ソース表がパーティション化されている場合: ソース表が Db2 V9.7 フィックスパック 1 以降のリリースで作成されたパーティション MDC 表である場合、ブロック索引はパーティション化されます。 このブロック索引がパーティションの新しいブロック索引になります。
    • ソースのパーティション MDC 表が Db2 V9.7 フィックスパック 1 より前のレベルで作成されている場合、表のブロック索引は非パーティション索引です。 ATTACH 操作中にこのブロック索引はドロップされ、ソース表の他のパーティション索引と同様のパーティション索引として作成されます。

      アタッチされたパーティションをオンラインにするには、ターゲット表に対して 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 表からデータ・パーティションをデタッチすると、ブロック索引は非パーティション索引になります。 以下の制約事項が適用されます。
    • 新たにデタッチされた表にデタッチ操作と同じ作業単位内でアクセスすることは、許可されません。
    • ターゲット表に対してデタッチ操作の一部として作成されたブロック索引は、デタッチ操作がコミットされた後の表への最初のアクセス時に再作成されます。 デタッチ操作前にソース表にパーティション索引があった場合、ブロック索引を再作成できるようにターゲット表の索引オブジェクトが無効とマークされます。 その結果、ブロック索引と他のすべてのパーティション索引が再作成されている間は、アクセス時間が長くなります。

    Db2 V9.7 フィックスパック 1 以降のリリースを使用して作成したパーティション MDC 表からパーティションをデタッチする場合、ブロック索引はパーティション化され、以前の制約事項は適用されません。 従属 MQT などの従属オブジェクトが他に存在しないとすれば、新たにデタッチされた表へのアクセスが同一作業単位内で可能です。 ブロック索引を含めすべてのパーティション索引は、再作成の必要なくターゲット表の索引になります。

  • 暗黙的に隠される列に関する考慮事項: 暗黙的に隠されると定義される列は、ALTER TABLE ステートメントで明示的に参照することができます。 例えば、暗黙的に隠される列は、参照制約、チェック制約、またはマテリアライズ照会表の定義の一部として変更または指定することができます。

    表の一部の列を暗黙的な非表示列に変更すると、表で作動しているデータ移動ユーティリティーの動作に影響を与える可能性があります。 表に暗黙的な非表示列が含まれる場合、IMPORT、INGEST、LOAD などのユーティリティーでは、非表示列のデータを対象の操作に含めるかどうかをユーザーが指定する必要があります。 これにより、例えば、表が変更される前には正常に実行できたロード操作で、障害が発生する可能性があります (SQLCODE SQL2437N)。 同様に、EXPORT の場合も、非表示列のデータを操作に含めるかどうかをユーザーが指定する必要があります。

    暗黙的な非表示列を含む表を処理する場合、データ移動ユーティリティーは DB2_DMU_DEFAULT レジストリー変数、またはimplicitlyhiddenincludeまたはimplicitlyhiddenmissingファイル・タイプ修飾子を使用する必要があります。

  • 明示的にアクティブ化される行アクセス制御: 表の行アクセス制御をアクティブにするために、ACTIVATE ROW ACCESS CONTROL 節が使用されます。 これが行われる場合、デフォルトの行権限は暗黙的に作成され、この表の行に対するアクセスは、セキュリティー管理者によって明示的に作成された行権限によって許可される場合を除き、許可されません。 デフォルトの行権限は、常に使用可能になっています。

    この表がデータ操作ステートメントで参照されるとき、その表に対して作成されたすべての有効な行権限 (デフォルトの行権限を含む) がデータベース・マネージャーによって暗黙的に適用され、表の中でアクセス可能な行が制御されます。 行アクセス制御検索条件は、有効になっている各行の許可の検索条件に論理 OR 演算子を適用することによって導出されます。 この得られた検索条件が、述部、グループ化、順序付けなどのユーザー指定の操作が処理される前に、表に対するフィルターとして機能します。 この得られた検索条件は、権限定義で指定した許可 ID でこの表の特定の行にアクセスすることを許可します。

    ACTIVATE ROW ACCESS CONTROL 節を使用すると、 この表を参照するすべてのパッケージおよび動的キャッシュ・ステートメントは無効になります。

    行アクセス制御は、DEACTIVATE ROW ACCESS CONTROL 節を使用してその強制適用を停止するまでは強制適用されます。

  • 表に対して行アクセス制御がアクティブになるときに作成される暗黙的なオブジェクト: ACTIVATE ROW ACCESS CONTROL 節を使用して表の行アクセス制御をアクティブにするとき、データベース・マネージャーは表のデフォルトの行権限を暗黙的に作成します。 デフォルトの行権限では、表へのすべてのアクセスが拒否されます。 暗黙的に作成された行の許可は、基本表と同じスキーマに存在し、 SYS_DEFAULT_ROW_PERMISSION__table-name ... の形式の名前を持ちます。 最大 128 文字です。 「PERMISSION」の後に、下線が 2 つあることに注意してください。 この名前が固有ではない場合、 最後の 4 文字は固有な番号「nnnn」のために予約されています。 ここで「nnnn」は、「0000」から始まり、固有の名前が見つかるまで 1 の値ずつ増えてゆく 4 文字の英数字から成るストリングです。

    デフォルトの行アクセス権の所有者は SYSIBM です。 デフォルトの行権限は、常に使用可能になっています。 デフォルトの行権限は、行アクセス制御が非アクティブになるか、表がドロップされるときにドロップされます。

  • 列アクセス制御のアクティブ化: 表の列レベルのアクセス制御をアクティブにするために、ACTIVATE COLUMN ACCESS CONTROL 節が使用されます。 この表へのアクセスは制限されませんが、表をデータ操作ステートメントで参照すると、その表に対して作成されたすべての有効な列マスクが適用され、最終結果表では、参照した列値がマスクされます。

    列マスクを使用して列値をマスクする場合、それらのマスクによって最終結果表の値が決まります。 列に列マスクがあり、その列が最外部の選択リストに出現する場合 (具体的には、 列名、または式に組み込まれている列の単純参照)、その列マスクが列に適用されて、最終結果表の値が生成されます。 その列が最外部の選択リストに出現しないものの、最終結果表に関与する場合 (例えばそれがマテリアライズ表の式またはビューに出現する場合)、マテリアライズ表の式またはビューの結果表にマスクされた値が組み込まれてそれを最終結果表で使用できるように、列マスクが列に適用されます。

    列マスクの適用は、そのステートメント内の他の節 (WHERE、GROUP BY、HAVING、SELECT DISTINCT、ORDER BY など) の操作に干渉することはありません。 最終結果表に返される行は、結果行に含まれている値が列マスクによってマスクされた可能性があるという点を除けば、違いはありません。 そのため、マスクされた列が ORDER BY ソート・キーにも出現する場合、順序は元の列値に基づくものとなり、最終結果表でマスクされた値にその順序が反映されない可能性があります。 同様に、マスクされた値は、SELECT DISTINCT によって強制適用される固有性が反映されない可能性があります。

    列マスクは、以下のコンテキストで適用されます。
    • SELECT または SELECT INTO ステートメントの最外部の SELECT 節。 あるいは、その列が最外部の選択リストには出現しなくても最終結果表に含まれる場合には、対応するマテリアライズ表式またはビューにおいてその列が出現する最外部の 1 つ以上の SELECT 節。
    • SELECT FROM INSERT、SELECT FROM UPDATE、または SELECT FROM DELETE のいずれかの操作の最外部の SELECT 節。
    • INSERT、UPDATE、または MERGE ステートメント、または SET transition-variable-name 割り当てステートメントの新しい値を取得するために使用される最外部の SELECT 節。 同様のマスキングが、上記ステートメント、SET host-variable 割り当てステートメントの右側、VALUES INTO ステートメント、または VALUES ステートメントの最外部の SELECT 節に出現するスカラー全選択式にも適用されます。
    列マスクは、マスクされる列が次のコンテキストに出現する場合には適用されません。
    • WHERE 節
    • GROUP BY 節
    • HAVING 節
    • SELECT DISTINCT
    • ORDER BY 節
  • EXPLAIN 表のデータが設定される場合は、行と列のアクセス制御は強制適用されない: EXPLAIN 表において行と列のアクセス制御を強制適用することができます。 ただし、データベース・マネージャーが行をこれらの表に挿入する場合は、使用可能な行権限と列マスクは適用されません。
  • イベント・モニター表のデータが設定される場合は、行と列のアクセス制御は強制適用されない: イベント・モニター表において行と列のアクセス制御を強制適用することができます。 ただし、データベース・マネージャーが行をこれらの表に挿入する場合は、使用可能な行権限と列マスクは適用されません。
  • テンポラル履歴表のデータが設定される場合は、行と列のアクセス制御は強制適用されない: テンポラル履歴表において行と列のアクセス制御を強制適用することができます。 ただし、データベース・マネージャーがシステム期間テンポラル表での操作のためにこれらの表にアクセスする場合は、使用可能な行権限と列マスクは適用されません。
  • 行または列のアクセス制御の強制適用の停止: 表の行アクセス制御の強制適用を停止するために、DEACTIVATE ROW ACCESS CONTROL 節が使用されます。 デフォルトの行権限はドロップされます。 その後この表がデータ操作ステートメントで参照されるとき、明示的に作成された行権限は適用されません。

    表の列アクセス制御の強制適用を停止するために、DEACTIVATE COLUMN ACCESS CONTROL 節が使用されます。 その後この表がデータ操作ステートメントで参照されるとき、列マスクは適用されません。

    明示的に作成された行権限または列マスクがある場合、それらはそのまま残りますが、作用しません。

    表を参照するすべてのパッケージおよび動的キャッシュ・ステートメントは、行または列のアクセス制御が非アクティブになると無効になります。

  • 行と列のアクセス制御のセキュア・トリガー: データベース保全性のためにトリガーが使用されます。そのため、行と列のアクセス制御 (セキュリティー) とデータベース保全性の間でバランスが必要です。 使用可能な行権限と列マスクは、遷移変数と遷移表の初期値には適用されません。 トリガー表に対して強制適用される行と列のアクセス制御も、トリガー本体で参照される遷移変数または遷移表において無視されます。 トリガー・アクションの SQL ステートメントで遷移変数と遷移表に含まれる機密データにアクセスするときのセキュリティー上の懸念をなくすため、トリガーは SECURED オプションを指定して作成または変更する必要があります。 トリガーがセキュアでない場合、行と列のアクセス制御はトリガー表には強制適用できません (SQLSTATE 55019)。
  • 行と列のアクセス制御におけるセキュアなユーザー定義関数: 行権限または列マスクの定義でユーザー定義関数を参照する場合、機密データが引数として関数に渡される可能性があるため、その関数は SECURED オプションを指定して変更する必要があります。 行または列のアクセス制御が強制適用された表を参照するデータ操作ステートメントでユーザー定義関数を参照し、 その関数引数でそのような表の列を参照する場合、 その関数がセキュアでないと、アクセス・プランの選択に影響を及ぼし、パフォーマンスが低下する可能性があります。 データベース・マネージャーは、SECURED オプションを、ユーザー定義関数に対するすべての変更についての変更制御監査プロシージャーをユーザーが設定したことを宣言するアサーションと見なします。 そのような制御監査プロシージャーが有効になっていて、後続のすべての ALTER FUNCTION ステートメント、または外部パッケージへの変更がこの監査プロセスによって検査されていると見なします。
  • 行と列のアクセス制御が適用されないデータベース操作: 行と列のアクセス制御を使用するためにデータベース保全性を犠牲にすることがないようにしてください。 主キー、ユニーク・キー、索引、チェック制約、および参照整合性に関係する列は、行と列のアクセス制御が適用されないようにする必要があります。 列マスクをそのような列に定義することはできますが、キー作成、制約強制適用、RI 強制適用のプロセス中には適用されません。
  • システム期間テンポラル表の定義: システム期間テンポラル表の定義には、以下の事柄が含まれます。
    • SYSTEM_TIME という名前のシステム期間。これは、行開始列と行終了列を使用して定義されます。 AS ROW BEGIN、AS ROW END、および period-definition の説明を参照してください。
    • トランザクション開始 ID 列。 AS TRANSACTION START ID の説明を参照してください。
    • 後続の ALTER TABLE ステートメントで ADD VERSIONING アクションを使用して指定されるシステム期間データ・バージョン管理定義。これには関連履歴表の名前が含まれます。 『ALTER TABLE』の下にある ADD VERSIONING 節の説明を参照してください。
    システム期間テンポラル表をドロップするときに履歴表が暗黙的にドロップされることがないように、履歴表の定義で WITH RESTRICT ON DROP 節を使用します。
  • アプリケーション期間のテンポラル表の定義: アプリケーション期間のテンポラル表の定義には、BUSINESS_TIME という名前のアプリケーション期間が含まれます。 アプリケーション期間は、DATE または TIMESTAMP (p) のいずれかの同じデータ・タイプを持つ開始列と終了列を使用して定義されます。 期間定義の説明を参照してください。

    アプリケーション期間のテンポラル表に対してデータ変更操作を行うと、行が更新または削除されるときに、1 つまたは 2 つの追加行が自動的に挿入される場合があります。 アプリケーション期間のテンポラル表のある行で示される期間の一部分に対して行の更新または削除を指定すると、その行は更新または削除され、その行の変更されない部分を示す行が 1、2 行が自動的に挿入されます。 表に対する更新操作または削除操作の結果として自動的に挿入される行ごとに、アプリケーション期間のテンポラル表に対して生成される各列に新規の値が生成されます。 生成される列がユニーク・キー、主キー、参照制約の親キー、またはユニーク索引の一部として定義される場合、自動挿入によって制約または索引に違反する可能性があり、その場合にはエラーが返されます。

  • トランザクション開始 ID 列に関する考慮事項: トランザクション開始 ID 列で NULL 値が許可され、行開始列が存在し、その行開始列の値が他のトランザクションで生成された行開始列の値とは異なる固有の値になっている場合、トランザクション開始 ID 列には NULL 値が含まれます。 列に NULL 値が含まれる可能性があることを考慮すると、列から値を取り出すときは、以下のいずれかのメソッドを使用することをお勧めします。
    • COALESCE (transaction_start_id_col, row_begin_col)
    • CASE WHEN transaction_start_id_col IS NOT NULL THEN transaction_start_id_col ELSE row_begin_col END
  • システム期間テンポラル表と、行および列のアクセス制御に関する考慮事項: 行および列のアクセス制御は、システム期間テンポラル表と、関連する履歴表の両方に定義できます。
    • システム期間テンポラル表へのアクセス時、システム期間テンポラル表に定義された行および列のアクセス規則は、行がシステム期間テンポラル表に格納されているか履歴表に格納されているかに関係なく、システム期間テンポラル表から戻される行のすべてに適用されます。 履歴表に定義された行および列のアクセス規則は、適用されません。
    • 履歴表に直接アクセスする際は、履歴表に定義された行および列のアクセス規則が適用されます。
    システム期間テンポラル表が定義され、そのシステム期間テンポラル表の行アクセス制御または列アクセス制御がアクティブである場合、データベース・マネージャーは自動的に、履歴表での行アクセス制御をアクティブにし、デフォルトの行権限を履歴表に作成します。
  • カラム・オーガナイズ 表に関する考慮事項: 以下のオプションを指定して、 カラム・オーガナイズ 表定義を変更することができます (下線付きオプションはデフォルトです)。
    • ACTIVATE NOT LOGGED INITIALLY
    • ACTIVATE/DEACTIVATE COLUMN ACCESS CONTROL
    • ACTIVATE/DEACTIVATE ROW ACCESS CONTROL
    • ADD COLUMN (表の列のコンプレッション・ディクショナリーを作成する未処理の非同期バックグラウンド・プロセスがある場合は別です (SQL20054N))
    • ADD CONSTRAINT <constraint-name> CHECK NOT ENFORCED ({ENABLE | DISABLE} QUERY OPTIMIZATION と一緒に使用する場合)
    • ADD CONSTRAINT <constraint-name> {PRIMARY KEY | UNIQUE | FOREIGN KEY NOT ENFORCED}
    • ADD MATERIALIZED QUERY
    • ADD PERIOD {SYSTEM_TIME | BUSINESS_TIME}
    • ADD RESTRICT ON DROP
    • ADD VERSIONING USE HISTORY TABLE
    • ALTER COLUMN <column name> SET DATA TYPE (VARCHAR/VARGRAPHIC 列の長さのみ増やす)
    • ALTER COLUMN <column-name> SET {NOT HIDDEN | IMPLICITLY HIDDEN}
    • DATA CAPTURE NONE
    • DROP {PRIMARY KEY | UNIQUE | CONSTRAINT} <constraint-name>
    • DROP DEFAULT
    • DROP GENERATED
    • DROP MATERIALIZED QUERY
    • DROP PERIOD {SYSTEM_TIME | BUSINESS_TIME}
    • DROP RESTRICT ON DROP
    • DROP VERSIONING
    • ログ索引作成 {NULL | OFF | ON}
    • SET GENERATED [ALWAYS | BY DEFAULT]
    • SET DEFAULT
    • SET GENERATED AS ROW {BEGIN | END}
    • SET GENERATED AS TRANSACTION START ID
    その他のオプションは、 カラム・オーガナイズ 表ではサポートされません。
  • ランダム分散表に関する考慮事項
    • 表をマテリアライズ照会表に変更する操作はサポートされていません
  • ランダム生成方式を使用するランダム分散表に関する考慮事項
    • ランダム分散キー列定義を変更するための以下のオプションはサポートされていません (これらに加えて、非ランダム分散表における分散キー列で既に非サポートのオプションもあります)。
      • ALTER COLUMN <column-name> SET NOT HIDDEN
      • ALTER COLUMN <column-name> DROP NOT NULL
      • ALTER COLUMN <column-name> DROP GENERATED
      • ALTER COLUMN <column-name> COMPRESS {OFF | SYSTEM DEFAULT}
      • RENAME COLUMN <column-name>
    • ALTER TABLE DROP DISTRIBUTION ステートメントでランダム分散をドロップすることはできません。
  • 代替構文: 以下に示す代替構文は、標準的な構文ではありません。 これらは、旧バージョンの製品や他のデータベース製品との互換性を保持するためにサポートされています。
    • 以下についての ADD キーワードはオプションです。
      • 名前のない PRIMARY KEY 制約
      • 名前のない参照制約
      • FOREIGN KEY 句の後に名前を指定した参照制約
    • CONSTRAINT キーワードは、参照節を定義する column-definition から省略できます。
    • constraint-name (制約名) を FOREIGN KEY に 続けて (CONSTRAINT キーワードなし) 指定することができます。
    • SET MATERIALIZED QUERY AS の代わりに SET SUMMARY AS を指定できます。
    • DROP MATERIALIZED QUERY の代わりに SET MATERIALIZED QUERY AS DEFINITION ONLY を指定できます。
    • ADD MATERIALIZED QUERY (全選択) の代わりに SET MATERIALIZED QUERY AS (全選択) を指定できます。
    • ADD DISTRIBUTE BY HASH の代わりに ADD PARTITIONING KEY を指定することができます。この場合、オプションの USING HASHING 節も指定できます。
    • DROP DISTRIBUTION の代わりに DROP PARTITIONING KEY を指定できます。
    • データ・タイプ LONG VARCHAR と LONG VARGRAPHIC は、引き続きサポートされていますが、非推奨になっています (特に移植可能なアプリケーションではお勧めしていません)。
    • identity-alteration 節では、コンマを使って複数のオプションを分離することができます。
    • PARTITION の代わりに PART を指定できます。
    • ENDING AT の代わりに VALUES を指定できます。
    • NO MINVALUE、NO MAXVALUE、NO CYCLE、NO CACHE、 および NO ORDER の代わりにそれぞれ、NOMINVALUE、NOMAXVALUE、NOCYCLE、NOCACHE および NOORDER を指定できます。
    • DROP GENERATED の代わりに DROP EXPRESSION を指定して、列の生成式属性をドロップできます。
    • DROP GENERATED の代わりに DROP IDENTITY を指定して、列の識別属性をドロップできます。
    • 日時特殊レジスターの値を指定する場合は、CURRENT_TIMESTAMP の代わりに NOW() を指定できます。
  • ALTER TABLE ステートメントで既存のビューを無効化した場合、無効化されたビューの統計プロファイルはブランクになります。

  1. 1 文字の長さの RATING という名前の列を、DEPARTMENT 表に追加します。
       ALTER TABLE DEPARTMENT
          ADD RATING CHAR(1)
  2. SITE_NOTES という名前の列を PROJECT 表に追加します。 SITE_NOTES は、最大 1000 バイトの長さの可変長列として作成します。 この列の値は、文字セットが関連付けられていないため、変換できません。
       ALTER TABLE PROJECT
          ADD SITE_NOTES  VARCHAR(1000) FOR BIT DATA
  3. 以下の列が定義された EQUIPMENT という表が存在するものと想定します。
       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
    さらに、この備品レコードに関連する数量を記録できるように、追加の列が必要です。 特に指定されない限り、EQUIP_QTY 列には値 1 を入れます。 NULL 値にしてはなりません。
       ALTER TABLE EQUIPMENT
         ADD COLUMN EQUIP_QTY
         SMALLINT NOT NULL DEFAULT 1
  4. 表 EMPLOYEE を変更します。 各従業員の給与と歩合の合計が $30,000 を超えていなければならない、 という定義済みの REVENUE という名前のチェック制約を追加します。
       ALTER TABLE EMPLOYEE
         ADD CONSTRAINT REVENUE
         CHECK (SALARY + COMM > 30000)
  5. 表 EMPLOYEE を変更します。 前に定義した制約 REVENUE をドロップします。
       ALTER TABLE EMPLOYEE
         DROP CONSTRAINT REVENUE
  6. SQL の変更内容をデフォルトのフォーマットでログに記録するように表を変更します。
       ALTER TABLE SALARY1
         DATA CAPTURE NONE
  7. SQL の変更内容を拡張フォーマットでログに記録するように表を変更します。
       ALTER TABLE SALARY2
         DATA CAPTURE CHANGES
  8. EMPLOYEE 表を変更して、デフォルト値を指定して 4 つの新しい列を追加します。
      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 や特殊タイプだからです。
  9. 以下の列のある CUSTOMERS という表が定義されます。
       Column Name        Data Type
       BRANCH_NO          SMALLINT
       CUSTOMER_NO        DECIMAL(7)
       CUSTOMER_NAME      VARCHAR(50)
    この表では、主キーは BRANCH_NO 列と CUSTOMER_NO 列からなります。 表を分散するには、表に対して分散キーを作成する必要があります。 表は単一のデータベース・パーティションからなるデータベース・パーティション・グループの表スペースに定義する必要があります。 主キーは、分散キー列のスーパーセットである必要があり、 主キーの 1 つ以上の列を分散キーとして使用する必要があります。 以下のようにして、BRANCH_NO を分散キーとして定義します。
       ALTER TABLE CUSTOMERS 
         ADD DISTRIBUTE BY HASH (BRANCH_NO)
  10. リモート表 EMPLOYEE が、フェデレーテッド・システムに透過 DDL を使用して作成されました。 リモート表 EMPLOYEE を変更して、列 PHONE_NO および WORK_DEPT を追加します。また、主キーを 既存の列 EMP_NO および新規列 WORK_DEPT に追加します。
       ALTER TABLE EMPLOYEE
         ADD COLUMN PHONE_NO CHAR(4) NOT NULL
         ADD COLUMN WORK_DEPT CHAR(3)
         ADD PRIMARY KEY (EMP_NO, WORK_DEPT)
  11. DEPARTMENT 表を変更して機能従属関係 FD1 を追加し、 次いで DEPARTMENT 表から機能従属関係をドロップします。
       ALTER TABLE DEPARTMENT
         ADD CONSTRAINT FD1
           CHECK ( DEPTNAME DETERMINED BY DEPTNO) NOT ENFORCED
    
       ALTER TABLE DEPARTMENT
         DROP CHECK FD1
  12. EMPLOYEE 表の WORKDEPT 列のデフォルト値を 123 に変更します。
       ALTER TABLE EMPLOYEE
         ALTER COLUMN WORKDEPT
           SET DEFAULT '123'
  13. セキュリティー・ポリシー DATA_ACCESS を EMPLOYEE 表に関連付けます。
       ALTER TABLE EMPLOYEE
         ADD SECURITY POLICY DATA_ACCESS
  14. 表 EMPLOYEE を変更して、SALARY 列を保護します。
       ALTER TABLE EMPLOYEE
         ALTER COLUMN SALARY
         SECURED WITH EMPLOYEESECLABEL
  15. 以下の列を伴って定義された SALARY_DATA という表があるとします。
    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
  16. DATE_ADDED という名前の列を表 BOOKS に追加します。 この列のデフォルト値は現在のタイム・スタンプです。
       ALTER TABLE BOOKS 
         ADD COLUMN DATE_ADDED TIMESTAMP 
         WITH DEFAULT CURRENT TIMESTAMP
  17. ラベル・ベースのアクセス制御セキュリティー属性を持つ表を、マテリアライズ照会表に変更します。 以下の SQL を使って作成された基本表 tt1 および tt2 が存在します。
       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です。