Db2 10.5 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-attributes |-+     
     | '-CONSTRAINT--constraint-name-'  | '-PRIMARY KEY-'              |                            |     
     |                                  +-| references-clause |--------+                            |     
     |                                  '-CHECK--(--check-condition--)-'                            |     
     |  (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-'      

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

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-----------+-'      
                    +-REPLICATION----+        
                    '-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-+-------------+-)-'          |  |              (11) | | |   
   | | |                           +-OCTETS------+              |  '-FOR BIT DATA------' | |   
   | | |                           '-CODEUNITS32-'              |                        | |   
   | | '-+-VARCHAR----------------+--(integer-+-------------+-)-'                        | |   
   | |   '-+-CHARACTER-+--VARYING-'           +-OCTETS------+                            | |   
   | |     '-CHAR------'                      '-CODEUNITS32-'                            | |   
   | |                                  .-(1M)-----------------------------.             | |   
   | '-+-CLOB------------------------+--+----------------------------------+-------------' |   
   |   '-+-CHARACTER-+--LARGE OBJECT-'  '-(integer-+---+-+-------------+-)-'               |   
   |     '-CHAR------'                             +-K-+ +-OCTETS------+                   |   
   |                                               +-M-+ '-CODEUNITS32-'                   |   
   |                                               '-G-'                                   |   
   |            .-(1)------------------------.                                             |   
   +-+-GRAPHIC--+----------------------------+------+--------------------------------------+   
   | |          '-(integer-+-------------+-)-'      |                                      |   
   | |                     +-CODEUNITS16-+          |                                      |   
   | |                     '-CODEUNITS32-'          |                                      |   
   | +-VARGRAPHIC--(integer-+-------------+-)-------+                                      |   
   | |                      +-CODEUNITS16-+         |                                      |   
   | |                      '-CODEUNITS32-'         |                                      |   
   | |         .-(1M)-----------------------------. |                                      |   
   | '-DBCLOB--+----------------------------------+-'                                      |   
   |           '-(integer-+---+-+-------------+-)-'                                        |   
   |                      +-K-+ +-CODEUNITS16-+                                            |   
   |                      +-M-+ '-CODEUNITS32-'                                            |   
   |                      '-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)。
  11. FOR BIT DATA 節とその後に続く他の列制約とは、任意の順序で指定できます。FOR BIT DATA 節をストリング単位 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 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 の数字から構成されます。)

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

rule-clause
『CREATE TABLE』の rule-clause を参照してください。
CHECK (check-condition)
これは、1 つの列に適用されるチェック制約を定義する簡単な方法です。 『CREATE TABLE』の check-condition を参照してください。
constraint-attributes
『CREATE TABLE』の constraint-attributes を参照してください。
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/RANDOM) の指定に関係なく、同じ列セットを指定していると、 索引定義は一致します。ただしパーティション表の場合、表パーティション・キー列のスーパーセットではない列が含まれる非ユニーク・パーティション索引は、一致する索引と見なされません。

一致する索引定義が見つかると、その索引の記述は、 システムによりその索引が必要であることを示すように変更され、 索引がユニークでない場合はユニーク索引に変更されます (固有性を確実にした後)。 表に一致する索引が複数ある場合、既存のユニーク索引が選択されます。 ユニーク索引が複数あると、以下の唯一の例外を除いて選択は任意です。
  • パーティション表では、一致するユニークな非パーティション索引や、一致する非ユニーク索引 (パーティションまたは非パーティション) よりも、一致するユニークなパーティション索引が優先されます。
一致する索引が見つからない場合は、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、これらのタイプのうちのいずれかに基づく特殊タイプ、または構造化タイプは、主キーの一部として使用できません (SQLSTATE 54008)。主キーの列セットは、ユニーク・キーの列セットと同じであってはなりません (SQLSTATE 01543)。 (LANGLEVEL が SQL92E または MIA の場合は、エラーが戻されます。SQLSTATE 42891) 指定した列セットに存在する値は、ユニークである必要があります (SQLSTATE 23515)。 column-name は、行変更タイム・スタンプの名前、あるいは期間の開始列または終了列の名前にすることはできません (SQLSTATE 428HW)。

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

一致する索引定義が見つかると、その索引の記述は、 その索引が 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 TABLE』の constraint-attributes を参照してください。
ADD referential-constraint
参照制約を定義します。 『CREATE TABLE』の referential-constraint を参照してください。
ADD check-constraint
チェック制約または機能従属関係を定義します。 『CREATE TABLE』の check-constraint を参照してください。
constraint-attributes
『CREATE TABLE』の constraint-attributes を参照してください。
ADD distribution-clause
分散キーを定義します。 表は、単一パーティションのデータベース・パーティション・グループにある表スペースに定義する必要があり (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
表の基礎となる照会を定義します。 既存の表の列は、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 として定義できます。
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 の制約属性を変更します。 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
挿入、更新、削除などの通常の操作中に、 データベース・マネージャーによって制約が課せられるかどうかを指定します。 親キーが強制適用されない場合、外部キー制約は 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 42613)。
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 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)。

built-in-type
組み込みデータ・タイプの説明については、『CREATE TABLE』を参照してください。
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)。 その列は、分散キー列またはマルチディメンション・クラスタリング (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 可能で、値を調整する必要がない行開始列が表にある場合には、その列に 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 権限を持つユーザーが明示的に作成した行権限によって許可される場合は例外です。

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

この表にトリガーが存在する場合、トリガーは 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)。 表がシステム期間テンポラル表である場合、関連した履歴表でも列が名前変更されます。

式ベースの索引キーで使用される列は、名前変更できません (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 の参照制約をドロップします。 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)。

変更の始まりLOCKSIZE キーワードは、カラム・オーガナイズ表ではサポートされていません (SQLSTATE 42858)。変更の終わり

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

規則

  • 表に対して定義されたユニーク・キー制約または主キー制約は、分散キー (存在する場合) のスーパーセットである必要があります (SQLSTATE 42997)。
  • 主キーまたはユニーク・キーは、ディメンションのサブセットにはなりません (SQLSTATE 429BE)。
  • 1 つの列の参照は、1 つの ALTER TABLE ステートメント内の 1 つの ADD、ALTER または DROP COLUMN 節でのみ可能です (SQLSTATE 42711)。
  • 表にマテリアライズ照会表があり、その表に従属している場合、列の長さ、データ・タイプ、または隠し属性を変更したり、列をドロップすることはできません (SQLSTATE 42997)。
  • それぞれ 4000 および 2000 より大きい数値に変更された VARCHAR および VARGRAPHIC 列は、 SYSFUN スキーマの関数での入力パラメーターとして使用しないでください (SQLSTATE 22001)。
  • 表に従属するビューがあり、照会最適化に使用可能になっている場合、 列の長さを変更することはできません (SQLSTATE 42997)。
  • 以下のことを行う前に、SET INTEGRITY ステートメントを OFF オプションとともに使用して、 表を 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)。

  • REORG 推奨操作は、ALTER TABLE ステートメントに起因する変更がデータの行フォーマットに影響する場合に行われています。 この操作が行われた場合、その後の表に対する操作はほとんど、表再編成操作が正しく完了するまで制限されます。 このタイプの ALTER TABLE ステートメントは、再編成が必要になるまでに最高で 3 つまで表に対して実行できます (SQLSTATE 57016)。 REORG 推奨操作を構成する複数の変更は、単一の ALTER TABLE ステートメント (列あたり 1 つ) の一部とすることができます。これは、単一の REORG 推奨操作とみなされます。例えば、単一の ALTER TABLE ステートメントの中で 2 つの列をドロップする場合、2 つの REORG 推奨操作とはみなされません。 ただし、2 つの別の ALTER TABLE ステートメントで 2 つの列をドロップする場合は、REORG 推奨操作を含む 2 つのステートメントとみなされます。
  • REORG 推奨操作が正しく行われた後は、以下の表操作が許可されます。
    • 行データ妥当性検査を必要としない ALTER TABLE。 ただし、以下の操作は許可されません (SQLSTATE 57007)。
      • ADD CHECK CONSTRAINT
      • ADD REFERENTIAL CONSTRAINT
      • ADD UNIQUE CONSTRAINT
      • ALTER COLUMN SET NOT NULL
    • DROP TABLE
    • RENAME TABLE
    • REORG TABLE
    • TRUNCATE TABLE
    • 表データの表スキャン・アクセス
  • 表をマテリアライズ照会表に変更すると、この表は 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-definition
      • column-options 節の中の NOT NULL と PRIMARY KEY
      • ADD unique-constraint (PRIMARY KEY のみ)
    • リモート基本表内の既存の列には、コメントを指定できません。
    • リモート基本表内の既存の主キーは、変更またはドロップできません。
    • リモート基本表の変更を行うと、 そのリモート基本表に関連したニックネームに従属するパッケージはいずれも無効になります。
    • リモート・データ・ソースは、ALTER TABLE ステートメントを通じて要求された変更をサポートする必要があります。 データ・ソースの、サポートしていない要求への応答方法によって、 エラーが返されるか、または要求が無視される可能性があります。
    • 透過 DDL を使用して作成されたのではないリモート基本表を変更しようとすると、エラーが返されます。
  • 主キー、ユニーク・キー、または外部キーに対する変更は、明示的、暗黙的を問わず、 パッケージ、索引、およびその他の外部キーに以下の影響を与える可能性があります。
    • 主キーまたはユニーク・キーが追加された場合、
      • パッケージ、外部キー、または既存のユニーク・キーに影響はありません。 (主キーまたはユニーク・キーが、前のバージョンで作成された既存のユニーク索引を使用しており、 固有性の据え置きをサポートするように変換されていない場合、索引は変換され、 関連した表の更新を行うパッケージは無効になります。)
    • 主キーまたはユニーク・キーがドロップされた場合、
      • 制約に関してその索引が自動的に作成されていた場合には、その索引はドロップされます。 索引に従属しているパッケージはすべて無効になります。
      • 索引が制約に関してユニークであるように変換されており、 現在システムが索引に関してユニークであることを必要としていない場合、索引は非ユニークに戻されます。 索引に従属しているパッケージはすべて無効になります。
      • 索引が制約のために使用された既存のユニーク索引だった場合、 索引はシステムが必要としていないことを示すよう設定されます。 パッケージに影響はありません。
      • すべての従属外部キーはドロップされます。 以下に示すように、従属外部キーごとにさらにアクションが取られます。
      • 表の主キー制約またはユニーク制約は、それが最後に強制適用される主キー制約またはユニーク制約であり、その列セットが関連シャドー表の選択リストに含まれる場合は、ドロップすることができません。
      • 主キー制約またはユニーク制約は、表に関連シャドー表があり、ドロップされる制約に関連シャドー表の主キーが依存している場合は、ドロップすることができません。
    • 外部キーが追加される、ドロップされる、 または 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 つの列に対する更新、 またはパフォーマンスを向上させるための制約の選択使用のいずれかを含むすべてのパッケージが無効になります。
  • 分散キーを追加すると、分散キーの少なくとも 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 節。 あるいは、その列が最外部の選択リストには出現しなくても最終結果表には関与する場合には、対応するマテリアライズ表式またはビューにおいてその列が出現する場所の最外部の 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 の説明を参照してください。
    • システム期間データ・バージョン管理定義。これは、関連した履歴表の名前が含まれる ADD VERSIONING アクションを使用する、後続の ALTER TABLE ステートメントで指定されます。『ALTER TABLE』の下にある ADD VERSIONING 節の説明を参照してください。
    システム期間テンポラル表をドロップするときに履歴表が暗黙的にドロップされることがないように、履歴表の定義で WITH RESTRICT ON DROP 節を使用します。
  • アプリケーション期間のテンポラル表の定義: アプリケーション期間のテンポラル表の定義には、BUSINESS_TIME という名前のアプリケーション期間が含まれます。 このアプリケーション期間は、開始列と終了列を使用して定義されます。 これらの列は両方とも、同じデータ・タイプ (DATE または TIMESTAMP(p) のどちらか) です。 period-definition の説明を参照してください。

    アプリケーション期間のテンポラル表に対してデータ変更操作を行うと、行が更新または削除されるときに、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
  • システム期間テンポラル表と、行および列のアクセス制御に関する考慮事項: 行および列のアクセス制御は、システム期間テンポラル表と、関連する履歴表の両方に定義できます。
    • システム期間テンポラル表へのアクセス時、システム期間テンポラル表に定義された行および列のアクセス規則は、行がシステム期間テンポラル表に格納されているか履歴表に格納されているかに関係なく、システム期間テンポラル表から戻される行のすべてに適用されます。履歴表に定義された行および列のアクセス規則は、適用されません。
    • 履歴表に直接アクセスする際は、履歴表に定義された行および列のアクセス規則が適用されます。
    システム期間テンポラル表が定義され、そのシステム期間テンポラル表の行アクセス制御または列アクセス制御がアクティブである場合、データベース・マネージャーは自動的に、履歴表での行アクセス制御をアクティブにし、デフォルトの行権限を履歴表に作成します。
  • 変更の始まりカラム・オーガナイズ表に関する考慮事項: カラム・オーガナイズ表定義を変更するために、以下のオプションがサポートされています。
    • ADD COLUMN
    • ADD PRIMARY KEY NOT ENFORCED / ENFORCED (デフォルト)
    • DROP PRIMARY KEY
    • ADD UNIQUE NOT ENFORCED / ENFORCED (デフォルト)
    • DROP UNIQUE
    • ADD CONSTRAINT CHECK NOT ENFORCED (ENABLE QUERY OPTIMIZATION または DISABLE QUERY OPTIMIZATION と共に)
    • ADD CONSTRAINT PRIMARY KEY
    • ADD CONSTRAINT UNIQUE KEY
    • ADD CONSTRAINT FOREIGN KEY NOT ENFORCED
    • DROP CONSTRAINT
    • ADD MATERIALIZED QUERY
    • DROP MATERIALIZED QUERY
    • LOG INDEX BUILD
    • ADD RESTRICT ON DROP
    • DROP RESTRICT ON DROP
    • DATA CAPTURE NONE
    • ALTER COLUMN <column name> SET IMPLICITLY HIDDEN / NOT HIDDEN
    変更の終わり
  • 代替構文: 変更の始まりDb2 の以前のバージョンおよび他のデータベース製品との互換性のために、以下の代替の構文がサポートされています。変更の終わりこれらの代替は非標準であり、使用すべきではありません。
    • 以下についての 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 を指定して、列の識別属性をドロップできます。
  • 変更の始まり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 でもあります。