DB2 Version 10.1 for Linux, UNIX, and Windows

ALTER TABLE ステートメント

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

呼び出し

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

許可

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

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

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

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

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

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

構文

構文図を読む構文図をスキップする
>>-ALTER TABLE--table-name-------------------------------------->

         .-----------------------------------------------------------------------------.         
         V  (1)         .-COLUMN-.                                                     |         
>--+-----------+-ADD--+-+--------+--| column-definition |-+--------------------------+-+-----+-><
   |           |      +-| unique-constraint |-------------+                          |       |   
   |           |      +-| referential-constraint |--------+                          |       |   
   |           |      +-| check-constraint |--------------+                          |       |   
   |           |      +-| distribution-clause |-----------+                          |       |   
   |           |      '-RESTRICT ON DROP------------------'                          |       |   
   |           |        .-MATERIALIZED-.                                             |       |   
   |           |      .-+--------------+--QUERY-.                                    |       |   
   |           +-ADD--+-------------------------+--| materialized-query-definition |-+       |   
   |           +-ALTER--+-FOREIGN KEY-+--constraint-name--| constraint-alteration |--+       |   
   |           |        '-CHECK-------'                                              |       |   
   |           |        .-COLUMN-.                                                   |       |   
   |           +-ALTER--+--------+--| column-alteration |----------------------------+       |   
   |           |                                    (2)                              |       |   
   |           +-+-ACTIVATE---+--ROW ACCESS CONTROL----------------------------------+       |   
   |           | '-DEACTIVATE-'                                                      |       |   
   |           |                                       (3)                           |       |   
   |           +-+-ACTIVATE---+--COLUMN ACCESS CONTROL-------------------------------+       |   
   |           | '-DEACTIVATE-'                                                      |       |   
   |           +-RENAME COLUMN--source-column-name--TO--target-column-name-----------+       |   
   |           +-DROP--+-PRIMARY KEY---------------------------+---------------------+       |   
   |           |       +-+-FOREIGN KEY-+--constraint-name------+                     |       |   
   |           |       | +-UNIQUE------+                       |                     |       |   
   |           |       | +-CHECK-------+                       |                     |       |   
   |           |       | '-CONSTRAINT--'                       |                     |       |   
   |           |       | .-COLUMN-.               .-CASCADE--. |                     |       |   
   |           |       +-+--------+--column-name--+----------+-+                     |       |   
   |           |       |                          '-RESTRICT-' |                     |       |   
   |           |       '-RESTRICT ON DROP----------------------'                     |       |   
   |           +-DROP DISTRIBUTION---------------------------------------------------+       |   
   |           |       .-MATERIALIZED-.                                              |       |   
   |           +-DROP--+--------------+--QUERY---------------------------------------+       |   
   |           +-ADD PERIOD--| period-definition |-----------------------------------+       |   
   |           +-DROP PERIOD--period-name--------------------------------------------+       |   
   |           +-DATA CAPTURE--+-NONE---------------------------------+--------------+       |   
   |           |               '-CHANGES--+-------------------------+-'              |       |   
   |           |                          '-INCLUDE LONGVAR COLUMNS-'                |       |   
   |           +-ACTIVATE NOT LOGGED INITIALLY--+------------------+-----------------+       |   
   |           |                                '-WITH EMPTY TABLE-'                 |       |   
   |           +-PCTFREE--integer----------------------------------------------------+       |   
   |           +-LOCKSIZE--+-ROW---------+-------------------------------------------+       |   
   |           |           +-BLOCKINSERT-+                                           |       |   
   |           |           '-TABLE-------'                                           |       |   
   |           +-APPEND--+-ON--+-----------------------------------------------------+       |   
   |           |         '-OFF-'                                                     |       |   
   |           |                   .-CARDINALITY-.                                   |       |   
   |           +-+-VOLATILE-----+--+-------------+-----------------------------------+       |   
   |           | '-NOT VOLATILE-'                                                    |       |   
   |           |                 .-ADAPTIVE-.                                        |       |   
   |           +-COMPRESS--+-YES-+----------+-+--------------------------------------+       |   
   |           |           |     '-STATIC---' |                                      |       |   
   |           |           '-NO---------------'                                      |       |   
   |           +-+-ACTIVATE---+--VALUE COMPRESSION-----------------------------------+       |   
   |           | '-DEACTIVATE-'                                                      |       |   
   |           '-LOG INDEX BUILD--+-NULL-+-------------------------------------------'       |   
   |                              +-OFF--+                                                   |   
   |                              '-ON---'                                                   |   
   +-ADD PARTITION--| add-partition |--------------------------------------------------------+   
   +-ATTACH PARTITION--| attach-partition |--------------------------------------------------+   
   +-DETACH PARTITION--partition-name--INTO--table-name1-------------------------------------+   
   +-ADD SECURITY POLICY--policy-name--------------------------------------------------------+   
   +-DROP SECURITY POLICY--------------------------------------------------------------------+   
   +-ADD VERSIONING--USE HISTORY TABLE--history-table-name-----------------------------------+   
   '-DROP VERSIONING-------------------------------------------------------------------------'   

add-partition

|--+----------------+--| boundary-spec |--+---------------------+-->
   '-partition-name-'                     '-IN--tablespace-name-'   

>--+---------------------------------------------------------+--|
   '-INDEX IN--tablespace-name--+--------------------------+-'   
                                '-LONG IN--tablespace-name-'     

boundary-spec

|--+-| starting-clause |--| ending-clause |-+-------------------|
   '-| ending-clause |----------------------'   

starting-clause

                            .-,------------.        
             .-FROM-.       V              |        
|--STARTING--+------+--+-(----+-constant-+-+--)-+--------------->
                       |      +-MINVALUE-+      |   
                       |      '-MAXVALUE-'      |   
                       '-+-constant-+-----------'   
                         +-MINVALUE-+               
                         '-MAXVALUE-'               

   .-INCLUSIVE-.   
>--+-----------+------------------------------------------------|
   '-EXCLUSIVE-'   

ending-clause

                        .-,------------.                       
           .-AT-.       V              |       .-INCLUSIVE-.   
|--ENDING--+----+--+-(----+-constant-+-+--)-+--+-----------+----|
                   |      +-MINVALUE-+      |  '-EXCLUSIVE-'   
                   |      '-MAXVALUE-'      |                  
                   '-+-constant-+-----------'                  
                     +-MINVALUE-+                              
                     '-MAXVALUE-'                              

attach-partition

|--+----------------+--| boundary-spec |--FROM--table-name------>
   '-partition-name-'                                        

   .-BUILD MISSING INDEXES----.   
>--+--------------------------+---------------------------------|
   '-REQUIRE MATCHING INDEXES-'   

column-definition

|--column-name--+-------------------+--+--------------------+---|
                |               (4) |  '-| column-options |-'   
                '-| data-type |-----'                           

column-options

   .--------------------------------------------------------------------------------------------------.   
   V                                                                                                  |   
|----+----------------------------------------------------------------------------------------------+-+--|
     +-NOT NULL-------------------------------------------------------------------------------------+     
     |                 (5)                                                                          |     
     +-| lob-options |------------------------------------------------------------------------------+     
     |                              (6)                                                             |     
     +-SCOPE--+-typed-table-name2-+-----------------------------------------------------------------+     
     |        '-typed-view-name2--'                                                                 |     
     +-+-----------------------------+--+-+-UNIQUE------+-----------------------------------------+-+     
     | '-CONSTRAINT--constraint-name-'  | '-PRIMARY KEY-'                                         | |     
     |                                  +-| references-clause |-----------------------------------+ |     
     |                                  '-CHECK--(--check-condition--)--| constraint-attributes |-' |     
     |  (7)                                                                                         |     
     +-----+-| default-clause |---+-----------------------------------------------------------------+     
     |     '-| generated-clause |-'                                                                 |     
     +-COMPRESS SYSTEM DEFAULT----------------------------------------------------------------------+     
     | .-COLUMN-.                                                                                   |     
     +-+--------+--SECURED WITH--security-label-name------------------------------------------------+     
     | .-NOT HIDDEN--------.                                                                        |     
     '-+-IMPLICITLY HIDDEN-+------------------------------------------------------------------------'     

lob-options

      .-LOGGED-----.     .-NOT COMPACT-.      
|--●--+------------+--●--+-------------+--●---------------------|
      '-NOT LOGGED-'     '-COMPACT-----'      

references-clause

|--REFERENCES--+-table-name-+--+-----------------------+-------->
               '-nickname---'  |    .-,-----------.    |   
                               |    V             |    |   
                               '-(----column-name-+--)-'   

>--| rule-clause |--| constraint-attributes |-------------------|

rule-clause

      .-ON DELETE NO ACTION-----.     .-ON UPDATE NO ACTION-.      
|--●--+-------------------------+--●--+---------------------+--●--|
      '-ON DELETE--+-RESTRICT-+-'     '-ON UPDATE RESTRICT--'      
                   +-CASCADE--+                                    
                   '-SET NULL-'                                    

constraint-attributes

      .-ENFORCED----------------------.      
|--●--+-------------------------------+--●---------------------->
      |               .-TRUSTED-----. |      
      '-NOT ENFORCED--+-------------+-'      
                      '-NOT TRUSTED-'        

   .-ENABLE QUERY OPTIMIZATION--.      
>--+----------------------------+--●----------------------------|
   '-DISABLE QUERY OPTIMIZATION-'      

default-clause

   .-WITH-.                                                                    
|--+------+--DEFAULT--+----------------------------------------------------+--|
                      +-constant-------------------------------------------+   
                      +-datetime-special-register--------------------------+   
                      +-user-special-register------------------------------+   
                      +-CURRENT SCHEMA-------------------------------------+   
                      +-CURRENT MEMBER-------------------------------------+   
                      +-NULL-----------------------------------------------+   
                      +-cast-function--(--+-constant------------------+--)-+   
                      |                   +-datetime-special-register-+    |   
                      |                   +-user-special-register-----+    |   
                      |                   '-CURRENT SCHEMA------------'    |   
                      +-EMPTY_CLOB()---------------------------------------+   
                      +-EMPTY_DBCLOB()-------------------------------------+   
                      '-EMPTY_BLOB()---------------------------------------'   

generated-clause

                .-ALWAYS-----.                                              
|--+-GENERATED--+------------+--| as-row-change-timestamp-clause |------+--|
   |            '-BY DEFAULT-'                                          |   
   |            .-ALWAYS-.                                              |   
   '-GENERATED--+--------+--+-| as-generated-expression-clause |------+-'   
                            +-| as-row-transaction-timestamp-clause |-+     
                            '-| as-row-transaction-start-id-clause |--'     

as-row-change-timestamp-clause

    (8)                                                   
|--------FOR EACH ROW ON UPDATE AS ROW CHANGE TIMESTAMP---------|

as-generated-expression-clause

|--AS--(--generation-expression--)------------------------------|

as-row-transaction-timestamp-clause

|--AS--ROW--+-BEGIN-+-------------------------------------------|
            '-END---'   

as-row-transaction-start-id-clause

|--AS--TRANSACTION START ID-------------------------------------|

unique-constraint

|--+-----------------------------+--+-UNIQUE------+------------->
   '-CONSTRAINT--constraint-name-'  '-PRIMARY KEY-'   

      .-,---------------.                                              
      V                 |                                              
>--(------column-name---+--+------------------------------------+--)--|
                           '-,--BUSINESS_TIME--WITHOUT OVERLAPS-'      

referential-constraint

|--+-----------------------------+------------------------------>
   '-CONSTRAINT--constraint-name-'   

                   .-,-----------.                             
                   V             |                             
>--FOREIGN KEY--(----column-name-+--)--| references-clause |----|

check-constraint

|--+-----------------------------+------------------------------>
   '-CONSTRAINT--constraint-name-'   

>--CHECK--(--| check-condition |--)----------------------------->

>--| constraint-attributes |------------------------------------|

check-condition

|--+-search-condition----------+--------------------------------|
   '-| functional-dependency |-'   

functional-dependency

|--+-column-name-----------+--DETERMINED BY--+-column-name-----------+--|
   |    .-,-----------.    |                 |    .-,-----------.    |   
   |    V             |    |                 |    V             |    |   
   '-(----column-name-+--)-'                 '-(----column-name-+--)-'   

distribution-clause

                               .-,-----------.      
                  .-HASH-.     V             |      
|--DISTRIBUTE BY--+------+--(----column-name-+--)---------------|

materialized-query-definition

|--(--fullselect--)--| refreshable-table-options |--------------|

refreshable-table-options

|--●--DATA INITIALLY DEFERRED--●--REFRESH--+-DEFERRED--+--●----->
                                           '-IMMEDIATE-'      

   .-ENABLE QUERY OPTIMIZATION--.      
>--+----------------------------+--●---------------------------->
   '-DISABLE QUERY OPTIMIZATION-'      

   .-MAINTAINED BY SYSTEM--------------.      
>--+-----------------------------------+--●---------------------|
   '-MAINTAINED BY--+-USER-----------+-'      
                    '-FEDERATED_TOOL-'        

constraint-alteration

   .-------------------------------------------.   
   V  (9)                                      |   
|--------+-+-ENABLE--+--QUERY OPTIMIZATION---+-+----------------|
         | '-DISABLE-'                       |     
         '-+-ENFORCED----------------------+-'     
           |               .-TRUSTED-----. |       
           '-NOT ENFORCED--+-------------+-'       
                           '-NOT TRUSTED-'         

column-alteration

|--column-name--+-SET--+-DATA TYPE--| altered-data-type |---------------+----------------+--|
                |      +-NOT NULL---------------------------------------+                |   
                |      +-INLINE LENGTH--integer-------------------------+                |   
                |      +-| default-clause |-----------------------------+                |   
                |      +-EXPRESSION--| as-generated-expression-clause |-+                |   
                |      '-+-NOT HIDDEN--------+--------------------------'                |   
                |        '-IMPLICITLY HIDDEN-'                                           |   
                +-SET--| generation-alteration |-----------------------------------------+   
                +-+--------------------------------+--| identity-alteration |------------+   
                | '-SET--| generation-alteration |-'                                     |   
                +-SET--| generation-attribute |--| as-identity-clause |------------------+   
                |                .-ALWAYS-.                                              |   
                +-SET GENERATED--+--------+--+-| as-generated-expression-clause |------+-+   
                |                            +-| as-row-transacton-start-id-clause |---+ |   
                |                            '-| as-row-transaction-timestamp-clause |-' |   
                +-DROP--+-DEFAULT---+----------------------------------------------------+   
                |       +-GENERATED-+                                                    |   
                |       '-NOT NULL--'                                                    |   
                +-ADD SCOPE--+-typed-table-name-+----------------------------------------+   
                |            '-typed-view-name--'                                        |   
                +-COMPRESS--+-SYSTEM DEFAULT-+-------------------------------------------+   
                |           '-OFF------------'                                           |   
                +-SECURED WITH--security-label-name--------------------------------------+   
                '-DROP COLUMN SECURITY---------------------------------------------------'   

altered-data-type

|--+-| built-in-type |-------+----------------------------------|
   |                    (10) |   
   '-distinct-type-name------'   

built-in-type

|--+-+-+-INTEGER-+-+-------------------------------------------------+--|
   | | '-INT-----' |                                                 |   
   | '-BIGINT------'                                                 |   
   |                  .-(5,0)-------------------.                    |   
   +-+-+-DECIMAL-+-+--+-------------------------+--------------------+   
   | | '-DEC-----' |  |          .-,0-------.   |                    |   
   | '-+-NUMERIC-+-'  '-(integer-+----------+-)-'                    |   
   |   '-NUM-----'               '-,integer-'                        |   
   |          .-(53)------.                                          |   
   +-+-FLOAT--+-----------+--+---------------------------------------+   
   | |        '-(integer)-'  |                                       |   
   | +-REAL------------------+                                       |   
   | |         .-PRECISION-. |                                       |   
   | '-DOUBLE--+-----------+-'                                       |   
   |           .-(34)-.                                              |   
   +-DECFLOAT--+------+----------------------------------------------+   
   |           '-(16)-'                                              |   
   |                    .-(1)-------.                                |   
   +-+-+-+-CHARACTER-+--+-----------+----------+--+--------------+-+-+   
   | | | '-CHAR------'  '-(integer)-'          |  '-FOR BIT DATA-' | |   
   | | '-+-VARCHAR----------------+--(integer)-'                   | |   
   | |   '-+-CHARACTER-+--VARYING-'                                | |   
   | |     '-CHAR------'                                           | |   
   | |                                  .-(1M)-------------.       | |   
   | '-+-CLOB------------------------+--+------------------+-------' |   
   |   '-+-CHARACTER-+--LARGE OBJECT-'  '-(integer-+---+-)-'         |   
   |     '-CHAR------'                             +-K-+             |   
   |                                               +-M-+             |   
   |                                               '-G-'             |   
   |            .-(1)-------.                                        |   
   +-+-GRAPHIC--+-----------+-------+--------------------------------+   
   | |          '-(integer)-'       |                                |   
   | +-VARGRAPHIC--(integer)--------+                                |   
   | |         .-(1M)-------------. |                                |   
   | '-DBCLOB--+------------------+-'                                |   
   |           '-(integer-+---+-)-'                                  |   
   |                      +-K-+                                      |   
   |                      +-M-+                                      |   
   |                      '-G-'                                      |   
   |                          .-(1M)-------------.                   |   
   '-+-BLOB----------------+--+------------------+-------------------'   
     '-BINARY LARGE OBJECT-'  '-(integer-+---+-)-'                       
                                         +-K-+                           
                                         +-M-+                           
                                         '-G-'                           

as-identity-clause

|--AS IDENTITY-------------------------------------------------->

>--+------------------------------------------------------+-----|
   |    .--------------------------------------------.    |   
   |    V  (9)              .-1----------------.     |    |   
   '-(--------+-START WITH--+-numeric-constant-+---+-+--)-'   
              |               .-1----------------. |          
              +-INCREMENT BY--+-numeric-constant-+-+          
              | .-NO MINVALUE----------------.     |          
              +-+-MINVALUE--numeric-constant-+-----+          
              | .-NO MAXVALUE----------------.     |          
              +-+-MAXVALUE--numeric-constant-+-----+          
              | .-NO CYCLE-.                       |          
              +-+-CYCLE----+-----------------------+          
              | .-CACHE 20----------------.        |          
              '-+-NO CACHE----------------+--------'          
                '-CACHE--integer-constant-'                   

generation-alteration

|--SET GENERATED--+-ALWAYS-----+--------------------------------|
                  '-BY DEFAULT-'   

identity-alteration

   .---------------------------------------------.   
   V  (9)                                        |   
|--------+-SET INCREMENT BY -numeric-constant--+-+--------------|
         +-SET--+-NO MINVALUE----------------+-+     
         |      '-MINVALUE--numeric-constant-' |     
         +-SET--+-NO MAXVALUE----------------+-+     
         |      '-MAXVALUE--numeric-constant-' |     
         +-SET--+-NO CYCLE-+-------------------+     
         |      '-CYCLE----'                   |     
         +-SET--+-NO CACHE----------------+----+     
         |      '-CACHE--integer-constant-'    |     
         +-SET--+-NO ORDER-+-------------------+     
         |      '-ORDER----'                   |     
         '-RESTART--+------------------------+-'     
                    '-WITH--numeric-constant-'       

generation-attribute

              .-ALWAYS-----.   
|--GENERATED--+------------+------------------------------------|
              '-BY DEFAULT-'   

period-definition

|--+-SYSTEM_TIME---+--(--begin-column-name--,--end-column-name--)--|
   '-BUSINESS_TIME-'                                                

注:
  1. 同じ節を複数回指定することはできません (SQLSTATE 42614)。
  2. 行アクセス制御に ACTIVATE 節または DEACTIVATE 節が指定されている場合、ACTIVATE または DEACTIVATE 列アクセス制御以外の他の節を、同じ ALTER TABLE ステートメントで指定することはできません (SQLSTATE 42613)。
  3. 列アクセス制御に ACTIVATE 節または DEACTIVATE 節が指定されている場合、ACTIVATE または DEACTIVATE 行アクセス制御以外の他の節を、同じ ALTER TABLE ステートメントの節で指定することはできません (SQLSTATE 42613)。
  4. 最初に選択された列オプションが generated-clause であれば、 data-type は省略できます。これは、生成式によって計算されることになります。
  5. lob-options 節は、 ラージ・オブジェクト・タイプ (CLOB、DBCLOB、および BLOB) と、 ラージ・オブジェクト・タイプに基づく特殊タイプに対してのみ適用されます。
  6. SCOPE 節は REF タイプに対してのみ適用されます。
  7. 同じ列定義で default-clause と generated-clause の両方を指定することはできません (SQLSTATE 42614)。
  8. 最初に指定された column-option が generated-clause の場合は、行変更タイム・スタンプ列のデータ・タイプはオプションで、データ・タイプのデフォルトは TIMESTAMP(6) です。最初の column-option が generated-clause の場合は、行開始列、行終了列、およびトランザクション開始 ID 列のデータ・タイプはオプションで、データ・タイプのデフォルトは TIMESTAMP(12) です。
  9. 同じ節を複数回指定することはできません。
  10. 指定した特殊タイプは、いかなるデータ・タイプ制約も持つことができません。また、ソース・タイプがアンカー・データ・タイプであってはなりません (SQLSTATE 428H2)。

説明

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

ADD column-definition
列を表に追加します。 表をシステム期間テンポラル表の履歴表にすることはできません (SQLSTATE 428HZ)。または、型付き表にすることはできません (SQLSTATE 428DH)。表のすべての既存の行で、新しい列の値はデフォルト値に設定されます。 新しい列はその表の最後の列になります。 つまり、当初 n 個の列があった場合、 追加された列は列 n+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 TABLE』の lob-options を参照してください。
SCOPE
参照タイプ列の有効範囲を指定します。
typed-table-name2
型付き表の名前。 column-name のデータ・タイプは REF(S) でなければなりません。 Styped-table-name2 のタイプを表します (SQLSTATE 428DM)。 値が typed-table-name2 の既存行を実際に参照していることを確認するための、 column-name のデフォルト値の検査は行われません。
typed-view-name2
型付きビューの名前。 column-name のデータ・タイプは REF(S) でなければなりません。 Styped-view-name2 のタイプを表します (SQLSTATE 428DM)。 値が typed-view-name2 の既存行を実際に参照していることを確認するための、 column-name のデフォルト値の検査は行われません。
CONSTRAINT constraint-name
制約の名前を指定します。 制約名 (constraint-name) は、 同じ ALTER TABLE ステートメントに既に指定されている制約、 あるいは表に既存の他の制約の名前であってはなりません (SQLSTATE 42710)。

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

主キー制約またはユニーク制約とともに使用した場合、 この constraint-name は、 制約をサポートするために作成される索引の名前として使用されます。 ユニーク制約に関連した索引名の詳細については、を参照してください。

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 TABLE』の references-clause を参照してください。

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

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

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

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

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

定数
列のデフォルト値として定数を指定します。 指定する定数は、次の条件を満たしていなければなりません。
  • 第 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
その列のデフォルト値として NULL を指定します。 NOT NULL の指定がある場合には、 DEFAULT NULL を同じ列定義に指定してはなりません。
cast-function
この形式のデフォルト値は、特殊タイプ (distinct type)、 BLOB、または日時 (DATE、TIME、 または TIMESTAMP) データ・タイプとして定義された列に対してのみ使用することができます。 特殊タイプで、BLOB や日時タイプに基づいている場合以外は、 関数名が列の特殊タイプの名前に一致していなければなりません。 スキーマ名で修飾されている場合には、 その特殊タイプのスキーマ名と同じでなければなりません。 修飾されていない場合には、 関数の解決で得られるスキーマ名は特殊タイプのスキーマ名と同じでなければなりません。 日時タイプに基づく特殊タイプで、デフォルト値が定数の場合、 必ず関数を使用する必要があります。さらに、その関数名は、 暗黙または明示のスキーマ名 SYSIBM を持つ特殊タイプのソース・タイプ名に一致していなければなりません。 他の日時列の場合は、対応する日時関数も使用できます。 BLOB または、BLOB に基づく特殊タイプの場合も、関数を使用する必要があります。 その関数名は、暗黙または明示のスキーマ名 SYSIBM を持つ BLOB でなければなりません。
定数
引数として定数を指定します。 指定する定数は、 特殊タイプのソース・タイプに関する定数の規則 (特殊タイプでない場合は、 データ・タイプに関する定数の規則) に従っていなければなりません。 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 では、ALTER TABLE ステートメントのタイム・スタンプに対応する値を使用
  • 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 (generation-expression)
列定義が式に基づくことを指定します。SET INTEGRITY ステートメントを OFF NO ACCESS オプションとともに使用して、表を 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 可能で、値を調整する必要がない行開始列が表にある場合には、その列に 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 のストリング値は自動的に圧縮されます。

COLUMN SECURED WITH security-label-name
表に関連するセキュリティー・ポリシーに対応して存在するセキュリティー・ラベルを識別します。 名前は非修飾でなければなりません (SQLSTATE 42601)。 表にはセキュリティー・ポリシーが関連付けられている必要があります (SQLSTATE 55064)。表はシステム期間テンポラル表であってはなりません。
NOT HIDDEN または IMPLICITLY HIDDEN
列を隠し列と定義するかどうかを指定します。列を表の暗黙的参照に組み込むかどうか、SQL ステートメントで明示的に参照できるかどうかは隠し属性によって決まります。 デフォルトは NOT HIDDEN です。
NOT HIDDEN
列を表の暗黙的参照に組み込むこと、および列を明示的に参照できることを指定します。
IMPLICITLY HIDDEN
名前で明示的に参照されない限り列は SQL ステートメントから不可視であることを指定します。例えば、表に IMPLICITLY HIDDEN 節によって定義された列が組み込まれている場合、暗黙的に隠された列は SELECT * の結果に組み込まれません。 しかし、暗黙的に隠された列の名前を明示的に参照する SELECT の結果については、結果表にその列が組み込まれます。
ADD unique-constraint
ユニーク制約または主キー制約を定義します。 主キー制約またはユニーク制約を、副表に追加することはできません (SQLSTATE 429B3)。 階層最上部のスーパー表の場合、制約はその表および関連する副表すべてに適用されます。
CONSTRAINT constraint-name
主キー制約、またはユニーク制約の名前を指定します。 詳細については、 『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) の指定に関係なく、同じ列セットを指定していると、 索引定義は一致します。 ただしパーティション表の場合、表パーティション・キー列のスーパーセットではない列が含まれる非ユニーク・パーティション索引は、一致する索引と見なされません。

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

一致する索引定義が見つかると、その索引の記述は、 システムによりその索引が必要であることを示すように変更され、 索引がユニークでない場合はユニーク索引に変更されます (固有性を確実にした後)。 表に一致する索引が複数ある場合、既存のユニーク索引が選択されます。 ユニーク索引が複数あると、以下の唯一の例外を除いて選択は任意です。
  • パーティション表では、一致するユニークな非パーティション索引や、一致する非ユニーク索引 (パーティションまたは非パーティション) よりも、一致するユニークなパーティション索引が優先されます。
一致する索引が見つからない場合は、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)。

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

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

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

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

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

ADD referential-constraint
参照制約を定義します。 『CREATE TABLE』の referential-constraint を参照してください。
ADD check-constraint
チェック制約または機能従属関係を定義します。 『CREATE TABLE』の check-constraint を参照してください。
ADD distribution-clause
分散キーを定義します。 表は、単一パーティションのデータベース・パーティション・グループにある表スペースに定義する必要があり (SQLSTATE 55037)、既存の分散キーがあってはなりません (SQLSTATE 42889)。 分散キーが表に既に存在している場合には、新しい分散キーを追加する前に既存のキーをドロップする必要があります。 分散キーを、副表に追加することはできません (SQLSTATE 428DH)。 .
DISTRIBUTE BY HASH (column-name...)
指定した列を使用して、分散キーを定義します。 各 column-name (列名) は、表の列を指定していなければなりません。 また、同じ列を複数回指定することはできません。 名前は非修飾でなければなりません。 列 column-name は分散キーにも表パーティション・キーにも属することはできません。それは LONG 列、DATALINK 列、XML 列、または構造化タイプ列のいずれかだからです。 列のデータ・タイプが 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
表の基礎となる照会を定義します。 既存の表の列は、fullselect の結果列と以下のような関係になければなりません (SQLSTATE 428EW)。
  • 列の数が同数でなければなりません。
  • 全く同じデータ・タイプでなければなりません。
  • 同じ順序を示す位置に同じ列名がなければなりません。

マテリアライズ照会表に fullselect を指定することについての詳細は、 『CREATE TABLE』を参照してください。追加の制限事項としては、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 (副選択) を処理する場合と同じ内容になります。 この属性を定義したマテリアライズ照会表には、INSERT、 UPDATE、 または DELETE ステートメントを使用できません (SQLSTATE 42807)。
ENABLE QUERY OPTIMIZATION
マテリアライズ照会表を照会の最適化に使用できるようにします。
DISABLE QUERY OPTIMIZATION
マテリアライズ照会表を照会の最適化に使用しません。 それでもその表を直接照会することはできます。
MAINTAINED BY
マテリアライズ照会表のデータが、システム、ユーザー、 またはレプリケーション・ツールのいずれによって保守されるかを指定します。
SYSTEM
マテリアライズ照会表のデータがシステムによって保守されるように指定します。
USER
マテリアライズ照会表のデータがユーザーによって保守されるように指定します。 ユーザーは、ユーザー保守のマテリアライズ照会表に対して、 更新、削除、また挿入操作を許可されます。 システム保守のマテリアライズ照会表で使用される REFRESH TABLE ステートメントは、 ユーザー保守のマテリアライズ照会表に対しては呼び出せません。 REFRESH DEFERRED マテリアライズ照会表だけが、MAINTAINED BY USER として定義できます。
FEDERATED_TOOL
マテリアライズ照会表のデータがレプリケーション・ツールによって保守されるように指定します。 システム保守のマテリアライズ照会表で使用される REFRESH TABLE ステートメントは、 フェデレーテッド・ツール保守のマテリアライズ照会表に対しては呼び出せません。 REFRESH DEFERRED のマテリアライズ照会表だけが、MAINTAINED BY FEDERATED_TOOL として定義できます。
ALTER FOREIGN KEY constraint-name
参照制約 constraint-name の制約属性を変更します。 constraint-name は既存の参照制約を指定する必要があります (SQLSTATE 42704)。
ALTER CHECK constraint-name
チェック制約または機能従属関係 constraint-name の制約属性を変更します。 constraint-name は、既存のチェック制約または機能従属関係を指定していなければなりません (SQLSTATE 42704)。
constraint-alteration
参照制約またはチェック制約に関連付けられた属性の変更のオプションです。
ENABLE QUERY OPTIMIZATION または DISABLE QUERY OPTIMIZATION
適切な状況下で、照会の最適化のために、 制約または機能従属関係を使用できるかどうかを指定します。
ENABLE QUERY OPTIMIZATION
制約が真であると想定され、照会の最適化に使用できます。
DISABLE QUERY OPTIMIZATION
制約を照会の最適化に使用できません。
ENFORCED または NOT ENFORCED
挿入、更新、削除などの通常の操作中に、 データベース・マネージャーによって制約が課せられるかどうかを指定します。
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 42613)。
ALTER column-alteration
列の定義を変更します。 指定した属性だけが変更され、他の属性は変更されません。 型付き表の列は変更できません (SQLSTATE 428DH)。 表は履歴表として定義できません (SQLSTATE 428FR)。
column-name
変更される列の名前を指定します。 column-name は、表の既存列を指定するものでなければなりません (SQLSTATE 42703)。 名前は非修飾でなければなりません。 同じ ALTER TABLE ステートメントで追加、変更、またはドロップされる列を指す名前は指定できません (SQLSTATE 42711)。
SET DATA TYPE altered-data-type
列の新規データ・タイプを指定します。新しいデータ・タイプは、列の既存のデータ・タイプからキャスト可能でなければなりません (SQLSTATE 42837)。ただし、いずれかのデータ・タイプが特殊タイプである場合は例外です。その場合、特殊タイプのソース・データ・タイプを使用して、データ・タイプがキャスト可能かどうかが判別されます。 LOB 列を異なるデータ・タイプに変更することはできません (SQLSTATE 42837)。非 LOB 列を LOB データ・タイプに変更することはできません (SQLSTATE 42837)。

既存データの非ブランク文字の切り捨てが発生するストリング・データ・タイプの変更は許可されません (SQLSTATE 42837)。

データ・タイプを変更した場合、表を再編成しないと表に完全にアクセスすることはできません (SQLSTATE 57016)。ただし、以下の場合を除きます。
  • VARCHAR 列または VARGRAPHIC 列の長さの増加
  • 既存データの末尾ブランクの切り捨てが発生しない VARCHAR 列または VARGRAPHIC 列の長さの縮小

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

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

列が分散キーの列である場合、新規データ・タイプは以下の要件を満たしている必要があります (SQLSTATE 42997)。
  • 現在の列タイプと同じデータ・タイプである
  • 現在の列タイプと同じ長さである (ただし、VARCHAR データ・タイプ列および VARGRAPHIC データ・タイプ列の長さを大きくする場合を除く)
  • 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)。

SET NOT NULL
列に NULL 値を含むことができないよう指定します。 表の既存の行内のこの列に関しては、どの値も NULL 値にすることはできません (SQLSTATE 23502)。 この節は、列が参照制約の外部キーで SET NULL の DELETE 規則によって指定されていて、外部キー内に、他にまったく NULL 可能な列が存在しない場合には許可されません (SQLSTATE 42831)。 列に関してこの属性を変更すると、その後の表アクセスが許可される前に表の再編成が必要になります (SQLSTATE 57016)。 この操作は表データの妥当性検査を必要とするため、表が REORG ペンディング状態になっている時には実行できないという点に注意してください (SQLSTATE 57016)。 表に対してデータ・キャプチャーを有効にすることはできません (SQLSTATE 42997)。

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

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

SET INLINE LENGTH integer
既存の構造化タイプ、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)
列の式を、指定された 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 generation-alteration
列の生成属性を変更するよう指定します。列が 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 numeric-constant
連続した 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 numeric-constant
最小値にする数値定数を指定します。 この値は、この列に割り当て可能な任意の正または負の値にすることができます (SQLSTATE 42815)。ただし最大値以下の値で (SQLSTATE 42815)、小数点の右側に非ゼロの数字がない値にします (SQLSTATE 428FA)。
SET NO MAXVALUE または MAXVALUE numeric-constant
昇順 ID 列が値の生成を循環または停止する最大値、あるいは最小値に達した後、 降順 ID 列が循環する最大値を指定します。 列は、指定した表の中に存在していなければならず (SQLSTATE 42703)、 あらかじめ IDENTITY 属性で定義されていなければなりません (SQLSTATE 42837)。
NO MAXVALUE
昇順シーケンスの場合、値は列のデータ・タイプの最大値です。 降順シーケンスの場合、値は最初の開始値です。
MAXVALUE numeric-constant
最大値にする数値定数を指定します。 この値は、この列に割り当て可能な任意の正または負の値にすることができます (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 列を使用して 1 列のユニーク索引を 定義することによって、固有性を確実にしてください。 このような ID 列にユニーク索引が存在し、固有ではない値が生成されると、エラーが起こります (SQLSTATE 23505)。

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

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

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

ID 列に新しい値が必要でも使用可能な未使用の値がキャッシュにない場合、値の割り振りはログへの入出力を待機する必要があります。 ただし、ID 列に新しい値が必要で、未使用の値がキャッシュにあれば、 その ID 値の割り振りが、ログへの入出力なしで素早く行われます。

システム障害に起因するものであっても通常のものであっても、データベース非アクティブ化が起こると、 コミットされたステートメントで使用されていないキャッシュ済みシーケンス値はすべて失われます (使用されなくなります)。 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 428FA) かぎり、この列に割り当てることができる正または負の値にすることができます(SQLSTATE 42815)。 numeric-constant が列の次の値として使用されます。

SET generation-attribute as-identity-clause
列を ID 列に変更します。列にデフォルトがある場合、または列が既に生成列である場合に、 この列変更を指定してはなりません (SQLSTATE 42837)。表がシステム期間テンポラル表である場合、関連する履歴表の列に、この変更による影響はありません。
GENERATED ALWAYS
行が挿入または更新されるときには必ずデータベース・マネージャーによって列の値を生成すること、 また、値は生成値でなければならないことを指定します。 ALWAYS は生成列のデフォルトです。
GENERATED BY DEFAULT
明示的な値が指定されていない限り、行が挿入または更新されるときにはデータベース・マネージャーによって列の値を生成すること、 また、デフォルト値を生成しなければならないことを指定します。
as-identity-clause
その列が表の ID 列であることを指定します。 1 つの表には 1 つしか ID 列があってはなりません (SQLSTATE 428C1)。 その列は NULL 可能でないものとして指定される必要があり (SQLSTATE 42997)、 列に関連したデータ・タイプは、 位取りがゼロの完全な数値データ・タイプでなければなりません (SQLSTATE 42815)。 完全な数値データ・タイプは次のいずれかです: SMALLINT、INTEGER、BIGINT、DECIMAL、 位取りがゼロの NUMERIC、またはこれらのいずれかのタイプに基づく特殊タイプ。 IDENTITY オプションの詳細については、『CREATE TABLE』を参照してください。
SET GENERATED ALWAYS
列を、生成式列、行開始列、行終了列、またはトランザクション開始 ID 列に変更します。 GENERATED ALWAYS は、行が挿入または更新されるときには必ずデータベース・マネージャーによって列の値を生成すること、 また、値は生成値でなければならないことを指定します。
AS (generation-expression)
列定義が式に基づくことを指定します。その列は生成式で既に定義されていてはならず、ID 列であってはならず、 明示的デフォルトを持つこともできません (SQLSTATE 42837)。 generation-expression は、生成される列を定義する際に適用されるのと同じ規則に適合する必要があります。 generation-expression の結果データ・タイプは、 列のデータ・タイプに割り当て可能でなければなりません (SQLSTATE 42821)。 その列は、分散キー列で、または ORGANIZE BY 節の中で、参照されていてはなりません (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 可能で、値を調整する必要がない行開始列が表にある場合には、その列に 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 57016)。 表に対してデータ・キャプチャーを有効にすることはできません (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 security-label-name
表に関連するセキュリティー・ポリシーに対応して存在するセキュリティー・ラベルを識別します。 名前は非修飾でなければなりません (SQLSTATE 42601)。 表にはセキュリティー・ポリシーが関連付けられている必要があります (SQLSTATE 55064)。表はシステム期間テンポラル表であってはなりません。
DROP COLUMN SECURITY
列を無保護列に変更します。
ACTIVATE ROW ACCESS CONTROL

表に対する行レベルのアクセス制御をアクティブにします。 この表は、型付き表、カタログ表 (SQLSTATE 55019)、作成済み一時表、宣言済み一時表 (SQLSTATE 42995)、ニックネーム (SQLSTATE 42809)、ビュー (SQLSTATE 42809) にすることはできません。

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

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

この表にトリガーが存在する場合、トリガーは 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) にすることはできません。

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

この表にトリガーが存在する場合、トリガーは 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

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

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

DEACTIVATE COLUMN ACCESS CONTROL

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

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

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

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

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 の参照制約をドロップします。 constraint-name には参照制約を指定する必要があります (SQLSTATE 42704)。 参照制約のドロップにより起こることについては、を参照してください。
DROP UNIQUE constraint-name
制約名が constraint-name であるユニーク制約の定義、およびこのユニーク制約に従属するすべての参照制約をドロップします。 constraint-name には既存の UNIQUE 制約を指定する必要があります (SQLSTATE 42704)。ユニーク制約のドロップにより起こることについては、を参照してください。
DROP CHECK constraint-name
制約名が constraint-name のチェック制約をドロップします。 constraint-name は、 表に定義されている既存のチェック制約を指定していなければなりません (SQLSTATE 42704)。
DROP CONSTRAINT constraint-name
制約名が constraint-name の制約をドロップします。 constraint-name は、表に定義されている既存のチェック制約、参照制約、主キー、またはユニーク制約のいずれかを指定していなければなりません (SQLSTATE 42704)。 制約のドロップにより起こることについては、を参照してください。
DROP COLUMN
指定の列を表からドロップします。 型付き表を使用することはできません (SQLSTATE 428DH)。 表に対してデータ・キャプチャーを有効にすることはできません (SQLSTATE 42997)。 列をドロップする場合、表に対して更新、挿入、削除、または索引スキャンを実行する前に、表を再編成する必要があります (SQLSTATE 57016)。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-name, end-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-name, end-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 period-name
指定した期間を表からドロップします。 この 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
ロードまたは表再編成操作において、 各ページに残すフリー・スペースのパーセンテージを指定します。 各ページの最初の行は、制約なしに追加されます。 ページに行が追加される際には、 少なくとも integer で指定された分 (%) のフリー・スペースがページに残されます。 PCTFREE 値は、load および table reorg ユーティリティーでのみ考慮されます。 integer の値は 0 から 99 です。 システム・カタログ (SYSCAT.TABLES) の PCTFREE 値 -1 は、デフォルト値として解釈されます。 表ページのデフォルトの PCTFREE 値は 0 です。表が型付き表である場合、このオプションは、型付き表階層のルート表に対してのみサポートされます (SQLSTATE 428DR)。
LOCKSIZE
表へのアクセス時に使用されるロックのサイズ (細分性) を指定します。 表定義でこのオプションを使用しても、通常のロック・エスカレーションの発生を妨げることはありません。 表が型付き表である場合、このオプションは、型付き表階層のルート表に対してのみサポートされます (SQLSTATE 428DR)。
ROW
行ロックの使用を指定します。 これは、表の作成時におけるデフォルトのロック・サイズです。
BLOCKINSERT
挿入操作時のブロック・ロックの使用を指定します。 これは、挿入の前にブロックに関して適切な排他ロックが取得され、挿入される行に関しては行ロックは行われないということを意味します。 このオプションは、別個のトランザクションが、表内の別個のセルに挿入を行う際に役立ちます。 同じセルへの挿入を行うトランザクションはやはり同時に挿入を行う可能性がありますが、それぞれに個別のブロックに対して挿入を行います。より多くのブロックが必要になる場合、これがセルのサイズに影響することもあります。 このオプションは、MDC 表に対してのみ有効です (SQLSTATE 42613)。
TABLE
表ロックの使用を指定します。 これは、適切な共有ロックまたは排他ロックが表で獲得されており、 意図ロック ("意図なし" は除く) が使用されないことを意味します。 パーティション表に関しては、このロック方針は、表ロックおよびデータ・パーティション・ロックの両方に、アクセスされるあらゆるデータ・パーティションについて適用されます。 この値を使用すると、獲得すべきロック数が限定されるため、照会のパフォーマンスが向上する可能性があります。 しかし、すべてのロックが表全体に対して獲得されるので、並行性も限定されます。
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
表の行にデータ圧縮を適用するかどうかを指定します。
YES
行および XML の圧縮を有効にするように指定します。表に対する挿入と更新の操作で、圧縮が行われるようになります。 索引圧縮は、CREATE INDEX ステートメントで明示的に使用不可にしない限りは、新しい索引で使用可能になります。ALTER INDEX ステートメントを使用して、既存の索引を圧縮できます。
表が変更されて行圧縮が使用可能になると、以下のいずれかのアクションを実行することにより、表のすべての行を即時に圧縮できます。
  • REORG コマンド
  • オンライン表移動
  • データのアンロードおよび再ロード
ADAPTIVE
表に対してアダプティブ圧縮を有効にします。データ行は、 表レベルとページ・レベルの両方のコンプレッション・ディクショナリーによる圧縮の対象になります。XML ストレージ・オブジェクト内 の XML 文書は、表レベルの XML コンプレッション・ディクショナリーによる圧縮の対象になります。ページ・レベルのコンプレッション・ディクショナリーは、行が挿入または更新されると自動的に作成されます。表レベルのコンプレッション・ディクショナリーは、 十分なデータが追加された後に、行データと XML データの両方に対して自動的に作成されます (コンプレッション・ディクショナリーがまだ存在していない場合)。
STATIC
表に対してクラシック行圧縮を有効にします。データ行は、 表レベルのコンプレッション・ディクショナリーによる圧縮の対象になり、XML ストレージ・オブジェクト内の XML 文書は、 表レベルの XML コンプレッション・ディクショナリーによる圧縮の対象になります。行データの表レベル・コンプレッション・ディクショナリーも XML データの表レベル・コンプレッション・ディクショナリーも存在しない場合、それらは十分なデータが追加された後に自動的に作成されます。

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

NO
データ行および 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、CLOB、DBCLOB、または BLOB である列の、長さがゼロのデータ値は、2 バイトだけ使用して保管されます。これは、VALUE COMPRESSION がアクティブでない場合に必要とされるストレージを下回ります。 COMPRESS SYSTEM DEFAULT オプションを使用して列を定義すると、列のシステム・デフォルト値も 合計 3 バイトのストレージを使用して保管できるようになります。 これをサポートする行形式は、各データ・タイプのバイト・カウントを決定し、NULL、長さがゼロの値、またはシステム・デフォルト値への更新、またはそれらの値からの更新を行う際に、データ・フラグメントの原因となる傾向があります。
DEACTIVATE
NULL 値は、今後の更新のために確保されたスペースと一緒に保管されます。 このスペースは、可変長の列のためには確保されません。 またそのようにすると、列のシステム・デフォルト値のストレージを効率的にサポートしません。 列が COMPRESS SYSTEM DEFAULT 属性を既に有していると、警告が出されます (SQLSTATE 01648)。
LOG INDEX BUILD
この表で索引の作成、再作成、または再編成の操作を行う際に実行されるロギングのレベルを指定します。
NULL
logindexbuild データベース構成パラメーターの値を使用して、 索引作成操作を完全にログに記録するかどうかを指定します。 これは、表が作成されるときのデフォルトです。
オフ
この表での索引作成操作が最小限ログに記録されることを指定します。 この値は、logindexbuild データベース構成パラメーターの設定をオーバーライドします。
ON
この表での索引作成操作が完全にログに記録されることを指定します。 この値は、logindexbuild データベース構成パラメーターの設定をオーバーライドします。
ADD PARTITION 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 tablespace-name
データ・パーティションが保管される表スペースを指定します。 指定する表スペースは、パーティション表の他の表スペースと同じページ・サイズ、同じデータベース・パーティション・グループ、同じスペース管理方式でなければなりません (SQLSTATE 42838)。 これは、同じ表の他のデータ・パーティションに既に使用されている表スペース、あるいは、この表によって現在使用されていない表スペースとすることもできます。しかし、ステートメントの許可 ID には、その表スペースに対する USE 特権が必要です (SQLSTATE 42727)。 この節が指定されなかった場合、表のデータ・パーティションのうち、最初の可視パーティションまたはアタッチされたパーティションの表スペースが使用されます。
INDEX IN tablespace-name
データ・パーティション上のパーティション索引が保管される表スペースを指定します。INDEX IN 節を指定しない場合は、データ・パーティション上のパーティション索引は、データ・パーティションと同じ表スペースに保管されます。

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

LONG IN tablespace-name
長い列データを含むデータ・パーティションが保管される表スペースを指定します。 指定する表スペースは、パーティション表の他の表スペースおよびデータ・パーティションと同じページ・サイズ、同じデータベース・パーティション・グループ、同じスペース管理方式でなければなりません (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 partition-name INTO table-name1
変更される表からデータ・パーティション partition-name をデタッチし、そのデータ・パーティションを使用して、table-name1 という名前の新規表を作成します。 このデータ・パーティションは変更される表からデタッチされ、これを使用してデータ移動なしで新規表が作成されます。 変更される表の最後に残ったデータ・パーティションを指定することはできません (SQLSTATE 428G2)。変更してパーティションをデタッチする表が、システム期間テンポラル表であってはなりません (SQLSTATE 428HZ)。

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

ADD SECURITY POLICY policy-name
セキュリティー・ポリシーを表に追加します。 セキュリティー・ポリシーは、現行サーバーに存在するものでなければなりません (SQLSTATE 42704)。 表に既存のセキュリティー・ポリシーがあってはなりません (SQLSTATE 55065)。また、型付き表 (SQLSTATE 428DH)、マテリアライズ照会表 (MQT)、またはステージング表 (SQLSTATE 428FG) であってはなりません。
DROP SECURITY POLICY
表からセキュリティー・ポリシーと、すべての LBAC 保護を削除します。 table-name によって指定される表は、セキュリティー・ポリシーによって保護される必要があります (SQLSTATE 428GT)。 表に、DB2SECURITYLABEL データ・タイプの列があれば、そのデータ・タイプは VARCHAR (128) FOR BIT DATA に変更されます。 表に保護された列が 1 つ以上あれば、それらの列は無保護になります。
ADD VERSIONING USE HISTORY TABLE 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 を指定して表を変更すると、その表におけるシステム期間テンポラル表に従属するタイプのパッケージはすべて無効になります。その表への従属関係が記録されているビューやトリガーなど、その他の従属オブジェクトも無効としてマークが付けられます。

規則