ALTER TABLE

ALTER TABLE ステートメントは、現行サーバーにある表の記述を変更します。

呼び出し

このステートメントは、アプリケーション・プログラムに組み込むことも、 あるいは対話式に実行することもできます。 これは、DYNAMICRULES の実行動作が暗黙的または明示的に指定されている場合のみ、動的に準備できる実行可能ステートメントです。

許可

以下に定義する特権セットには、少なくとも次のいずれかが含まれていなければいけません。

  • 表に対する ALTER 特権
  • 表の所有権
  • データベースの DBADM 権限
  • SYSADM または SYSCTRL 権限
  • 変更の始まりシステム DBADM変更の終わり

変更の始まりシステム期間テンポラル表に変更を加える場合、1 つ以上の変更の結果として関連する履歴表も変更されるのであれば、ステートメントの許可 ID が保持する特権に、以下のうち少なくとも 1 つが含まれている必要もあります。変更の終わり

変更の始まり
  • 履歴表に対する ALTER 特権
  • 履歴表の所有権
  • データベースの DBADM 権限
  • SYSADM または SYSCTRL 権限
  • システム DBADM
変更の終わり

データベースを暗黙的に作成する場合、データベース特権が暗黙的データベースまたは DSNDB04 上になければなりません。

変更の始まり特権セットに以下のいずれかの文節が指定されている場合、この特権セットには SECADM 権限が含まれている必要があります。変更の終わり

変更の始まり
  • ACTIVATE
  • DEACTIVATE
変更の終わり

以下の場合には、さらに特権が必要になる可能性があります。

  • FOREIGN KEY、 ADD PRIMARY KEY、 ADD UNIQUE、 DROP PRIMARY KEY、 DROP FOREIGN KEY、または DROP CONSTRAINT を指定している。
  • 表に追加される列のデータ・タイプが特殊タイプである。
  • 全選択を指定している。
  • 列がセキュリティー・ラベル列として定義されている。
  • ROWID GENERATED BY DEFAULT として列が定義されている。

上記の特権の詳細については、 適切な文節の説明を参照してください。

特権セット : アプリケーション・プログラムにこの ステートメントを組み込む場合、特権セットは、パッケージの所有者が持つ特権となります。 このステートメントが動的に準備される場合、特権セットは、 プロセスの各許可 ID およびロールが持つ特権セットの和集合になります。

構文

>>-ALTER TABLE--table-name-------------------------------------->

   .-----------------------------------------------------------------------------------------.   
   V  (1)   (2)   (3)       .-COLUMN-.                                                       |   
>--------------------+-ADD--+--------+--| column-definition |------------------------------+-+-><
                     |        .-COLUMN-.                                                   |     
                     +-ALTER--+--------+--| column-alteration |----------------------------+     
                     +-RENAME COLUMN--source-column-name--TO--target-column-name-----------+     
                     +-ADD PERIOD--| period-definition |-----------------------------------+     
                     |                                     (4)                             |     
                     +-ADD--+-| unique-constraint |------+---------------------------------+     
                     |      +-| referential-constraint |-+                                 |     
                     |      '-| check-constraint |-------'                                 |     
                     +-DROP--+-PRIMARY KEY ---------------------+--------------------------+     
                     |       '-+-UNIQUE------+--constraint-name-'                          |     
                     |         +-FOREIGN KEY-+                                             |     
                     |         +-CHECK-------+                                             |     
                     |         '-CONSTRAINT--'                                             |     
                     +-ADD PARTITION BY--| partitioning-clause |---------------------------+     
                     +-ADD PARTITION--+----------------------+-----------------------------+     
                     |                '-| partition-clause |-'                             |     
                     +-ALTER PARTITION--integer--| partition-clause |----------------------+     
                     +-ROTATE PARTITION--+-FIRST---+--TO LAST--| rotate-partition-clause |-+     
                     |                   '-integer-'                                       |     
                     +-ADD ORGANIZE BY HASH--| organization-clause |-----------------------+     
                     +-ALTER ORGANIZATION--SET HASH SPACE--integer--+-K-+------------------+     
                     |                                              +-M-+                  |     
                     |                                              '-G-'                  |     
                     +-DROP ORGANIZATION---------------------------------------------------+     
                     +-ADD VERSIONING--USE HISTORY TABLE--history-table-name---------------+     
                     +-DROP VERSIONING-----------------------------------------------------+     
                     |        .-MATERIALIZED-.                                             |     
                     |      .-+--------------+--QUERY-.                                    |     
                     +-ADD--+-------------------------+--| materialized-query-definition |-+     
                     |        .-MATERIALIZED-.                                             |     
                     +-ALTER--+--------------+--QUERY--| materialized-query-alteration |---+     
                     |       .-MATERIALIZED-.                                              |     
                     +-DROP--+--------------+--QUERY---------------------------------------+     
                     +-DATA CAPTURE -+-NONE----+-------------------------------------------+     
                     |               '-CHANGES-'                                           |     
                     |                   .-CARDINALITY-.                                   |     
                     +-+-VOLATILE-----+--+-------------+-----------------------------------+     
                     | '-NOT VOLATILE-'                                                    |     
                     +-ADD CLONE--clone-table-name-----------------------------------------+     
                     +-DROP CLONE----------------------------------------------------------+     
                     +-ADD RESTRICT ON DROP------------------------------------------------+     
                     +-DROP RESTRICT ON DROP-----------------------------------------------+     
                     +-+-ACTIVATE---+--ROW ACCESS CONTROL----------------------------------+     
                     | '-DEACTIVATE-'                                                      |     
                     +-+-ACTIVATE---+--COLUMN ACCESS CONTROL-------------------------------+     
                     | '-DEACTIVATE-'                                                      |     
                     +-APPEND--+-NO--+-----------------------------------------------------+     
                     |         '-YES-'                                                     |     
                     +-AUDIT--+-NONE----+--------------------------------------------------+     
                     |        +-CHANGES-+                                                  |     
                     |        '-ALL-----'                                                  |     
                     '-VALIDPROC--+-program-name-+-----------------------------------------'     
                                  '-NULL---------'                                               

注:
  1. 同じ節を複数回指定することはできません (ADD COLUMN または ALTER COLUMN 節の場合を除く)。複数の ADD COLUMN 節を同じステートメントに指定する場合、references-clause を含むことができる ADD COLUMN 節は多くて 1 つです。 ALTER COLUMN SET DATA TYPE を指定する場合は、最初に指定する必要があります。
  2. ALTER COLUMN、 ADD PARTITION、 ALTER PARTITION、および ROTATE PARTITION 節を同時に指定することはできません。
  3. ADD CLONE、D ROP CLONE、 RENAME COLUMN、 ADD ORGANIZE BY HASH、 ALTER ORGANIZATION、 DROP ORGANIZATION、 ADD VERSIONING、 DROP VERSIONING、 ACTIVATE、または DEACTIVATE が指定されている場合、ALTER TABLE ステートメントで他の節を使用することはできません。
  4. referential-constraint または unique-constraint をステートメン トの最初の文節として指定する場合、ADD キーワードはオプションです。 それ以外の場合は、ADD が必要です。
column-definition:

                              (1) (2)   
>>-column-name--| data-type |----------------------------------->

   .--------------------------------------------------------------------------------.   
   V                                                                                |   
>----+----------------------------------------------------------------------------+-+-><
     +-| default-clause |---------------------------------------------------------+     
     +-NOT NULL-------------------------------------------------------------------+     
     +-| column-constraint |------------------------------------------------------+     
     |            .-ALWAYS-----.                                              (3) |     
     +-GENERATED--+------------+--+-----------------------------------------+-----+     
     |            '-BY DEFAULT-'  +-| as-identity-clause |------------------+     |     
     |                            +-| as-row-change-timestamp-clause |------+     |     
     |                            +-| as-row-transaction-timestamp-clause |-+     |     
     |                            '-| as-row-transaction-id-clause |--------'     |     
     |                   (4)                                                      |     
     +-IMPLICITLY HIDDEN----------------------------------------------------------+     
     |                   (5)                                                      |     
     +-AS SECURITY LABEL----------------------------------------------------------+     
     +-FIELDPROC -program-name--+------------------+------------------------------+     
     |                          |   .-,--------.   |                              |     
     |                          |   V          |   |                              |     
     |                          '-(---constant-+-)-'                              |     
     |                        (6)                                                 |     
     '-INLINE LENGTH--integer-----------------------------------------------------'     

注:
  1. as-row-change-timestamp-clauseを指定した場合は、data-type はオプションです。
  2. 同じ文節を複数回指定しないでください。
  3. 列を ID 列にする場合、GENERATED を指定する必要があります。
  4. IMPLICITLY HIDDEN は、ROWID として定義される列、または ROWID に基づく特殊タイプに対して指定しないでください。
  5. AS SECURITY LABEL は、CHAR(8) データ・タイプの場合のみ指定でき、NOT NULL 文節と WITH DEFAULT 文節の指定を必要とします。
  6. INLINE LENGTH は、LOB データ・タイプ、または LOB データ・タイプに基づく特殊タイプの列にのみ適用されます。
data-type:

>>-+-built-in-type------+--------------------------------------><
   '-distinct-type-name-'   

built-in-type:

>>-+-+-SMALLINT----+---------------------------------------------------------------------+-><
   | +-+-INTEGER-+-+                                                                     |   
   | | '-INT-----' |                                                                     |   
   | '-BIGINT------'                                                                     |   
   |              .-(5,0)--------------------.                                           |   
   +-+-DECIMAL-+--+--------------------------+-------------------------------------------+   
   | +-DEC-----+  '-(integer-+-----------+-)-'                                           |   
   | '-NUMERIC-'             '-, integer-'                                               |   
   |          .-(53)------.                                                              |   
   +-+-FLOAT--+-----------+--+-----------------------------------------------------------+   
   | |        '-(integer)-'  |                                                           |   
   | +-REAL------------------+                                                           |   
   | |         .-PRECISION-. |                                                           |   
   | '-DOUBLE--+-----------+-'                                                           |   
   |           .-(34)-.                                                                  |   
   +-DECFLOAT--+------+------------------------------------------------------------------+   
   |           '-(16)-'                                                                  |   
   |                    .-(1)-------.                                                    |   
   +-+-+-+-CHARACTER-+--+-----------+----------+--+----------------------+-------------+-+   
   | | | '-CHAR------'  '-(integer)-'          |  '-FOR--+-SBCS--+--DATA-'             | |   
   | | '-+-+-CHARACTER-+--VARYING-+--(integer)-'         +-MIXED-+                     | |   
   | |   | '-CHAR------'          |                      '-BIT---'                     | |   
   | |   '-VARCHAR----------------'                                                    | |   
   | |                                  .-(1M)-------------.                           | |   
   | '-+-+-CHARACTER-+--LARGE OBJECT-+--+------------------+--+----------------------+-' |   
   |   | '-CHAR------'               |  '-(integer-+---+-)-'  '-FOR--+-SBCS--+--DATA-'   |   
   |   '-CLOB------------------------'             +-K-+             '-MIXED-'           |   
   |                                               +-M-+                                 |   
   |                                               '-G-'                                 |   
   |            .-(1)-------.                                                            |   
   +-+-GRAPHIC--+-----------+-------+----------------------------------------------------+   
   | |          '-(integer)-'       |                                                    |   
   | +-VARGRAPHIC--(--integer--)----+                                                    |   
   | |         .-(1M)-------------. |                                                    |   
   | '-DBCLOB--+------------------+-'                                                    |   
   |           '-(integer-+---+-)-'                                                      |   
   |                      +-K-+                                                          |   
   |                      +-M-+                                                          |   
   |                      '-G-'                                                          |   
   |           .-(1)-------.                                                             |   
   +-+-BINARY--+-----------+-------------------------+-----------------------------------+   
   | |         '-(integer)-'                         |                                   |   
   | +-+-BINARY VARYING-+-(integer)------------------+                                   |   
   | | '-VARBINARY------'                            |                                   |   
   | |                          .-(1M)-------------. |                                   |   
   | '-+-BINARY LARGE OBJECT-+--+------------------+-'                                   |   
   |   '-BLOB----------------'  '-(integer-+---+-)-'                                     |   
   |                                       +-K-+                                         |   
   |                                       +-M-+                                         |   
   |                                       '-G-'                                         |   
   +-+-DATE------------------------------------------------+-----------------------------+   
   | +-TIME------------------------------------------------+                             |   
   | |            .-(--6--)-------.  .-WITHOUT TIME ZONE-. |                             |   
   | '-TIMESTAMP--+---------------+--+-------------------+-'                             |   
   |              '-(--integer--)-'  '-WITH TIME ZONE----'                               |   
   +-ROWID-------------------------------------------------------------------------------+   
   '-XML--+-----------------------------+------------------------------------------------'   
          '-(--| XML-type-modifier |--)-'                                                    

変更の始まり

XML-type-modifier:

変更の終わり
              .-,-------------------------------------------------------.   
              V                                                         |   
>>-XMLSCHEMA----| XML-schema-specification |--+-----------------------+-+-><
                                              '-ELEMENT--element-name-'     

変更の始まり

XML-schema-specification:

変更の終わり
>>-+-ID--registered-XML-schema-name---------------------------+-><
   '-+-URL--target-namespace-+--+---------------------------+-'   
     '-NO NAMESPACE----------'  '-LOCATION--schema-location-'     

default-clause:

   .-WITH-.                                                                      
>>-+------+--DEFAULT--+------------------------------------------------------+-><
                      +-constant---------------------------------------------+   
                      +-+-SESSION_USER-+-------------------------------------+   
                      | '-USER---------'                                     |   
                      +-CURRENT SQLID----------------------------------------+   
                      +-NULL-------------------------------------------------+   
                      |  (1)                                                 |   
                      '-------cast-function-name--(--+-constant---------+--)-'   
                                                     +-+-SESSION_USER-+-+        
                                                     | '-USER---------' |        
                                                     +-CURRENT SQLID----+        
                                                     '-NULL-------------'        

注:
  1. DEFAULT 値の cast-function-name 形式は 、特殊タイプとして定義された列だけで使用できます。
as-identity-clause:

>>-AS IDENTITY--+-------------------------------------------------------+-><
                |    .---------------------------------------------.    |   
                |    V  (1)                                        |    |   
                '-(---------+-START WITH -numeric-constant-------+-+--)-'   
                            | .-INCREMENT BY 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-'        |          
                            | .-NO ORDER-.                       |          
                            '-+-ORDER----+-----------------------'          

注:
  1. ID 列を定義する場合には、属性の間に区切り文字のコンマを指定できます。
as-row-change-timestamp-clause:

>>-FOR EACH ROW ON UPDATE AS ROW CHANGE TIMESTAMP--------------><

as-row-transaction-timestamp-clause:

>>-AS ROW--+-BEGIN-+-------------------------------------------><
           '-END---'   

as-row-transaction-id-clause:

>>-AS TRANSACTION START ID-------------------------------------><

column-constraint

>>-+-| references-clause |-+-----------------------------------><
   '-| check-constraint |--'   

column-alteration:

>>-column-name--+-SET--+-DATA TYPE--| altered-data-type |--+----------------------------+---+-+-><
                |      |                                   |                        (1) |   | |   
                |      |                                   '-INLINE LENGTH--integer-----'   | |   
                |      +-| default-clause |-------------------------------------------------+ |   
                |      +-INLINE LENGTH--integer---------------------------------------------+ |   
                |      +-GENERATED--+-ALWAYS-----+--+-------------------------+-------------+ |   
                |      |            '-BY DEFAULT-'  '-| identity-alteration |-'             | |   
                |      +-| identity-alteration |--------------------------------------------+ |   
                |      |            .-ALWAYS-----.                                          | |   
                |      '-GENERATED--+------------+--+-| as-transaction-timestamp-clause |-+-' |   
                |                   '-BY DEFAULT-'  '-| as-transaction-id-clause |--------'   |   
                '-DROP DEFAULT----------------------------------------------------------------'   

注:
  1. INLINE LENGTH は、ユニバーサル表スペースにある表の LOB 列にのみ指定できます。 FOR SBCS DATA または FOR MIXED DATA も指定する場合、INLINE LENGTH は指定できません。
altered-data-type:

>>-+-+-SMALLINT----+---------------------------------------------------------------------+-><
   | +-+-INTEGER-+-+                                                                     |   
   | | '-INT-----' |                                                                     |   
   | '-BIGINT------'                                                                     |   
   |              .-(5,0)----------------------.                                         |   
   +-+-DECIMAL-+--+----------------------------+-----------------------------------------+   
   | +-DEC-----+  '-(-integer--+-----------+-)-'                                         |   
   | '-NUMERIC-'               '-, integer-'                                             |   
   |          .-(53)------.                                                              |   
   +-+-FLOAT--+-----------+--+-----------------------------------------------------------+   
   | |        '-(integer)-'  |                                                           |   
   | +-REAL------------------+                                                           |   
   | |         .-PRECISION-. |                                                           |   
   | '-DOUBLE--+-----------+-'                                                           |   
   |           .-(34)-.                                                                  |   
   +-DECFLOAT--+------+------------------------------------------------------------------+   
   |           '-(16)-'                                                                  |   
   |                    .-(1)-------.                                                    |   
   +-+-+-+-CHARACTER-+--+-----------+----------+--+----------------------+-------------+-+   
   | | | '-CHAR------'  '-(integer)-'          |  '-FOR--+-SBCS--+--DATA-'             | |   
   | | '-+-+-CHARACTER-+--VARYING-+--(integer)-'         +-MIXED-+                     | |   
   | |   | '-CHAR------'          |                      '-BIT---'                     | |   
   | |   '-VARCHAR----------------'                                                    | |   
   | |                                  .-(1M)-------------.                           | |   
   | '-+-+-CHARACTER-+--LARGE OBJECT-+--+------------------+--+----------------------+-' |   
   |   | '-CHAR------'               |  '-(integer-+---+-)-'  '-FOR--+-SBCS--+--DATA-'   |   
   |   '-CLOB------------------------'             +-K-+             '-MIXED-'           |   
   |                                               +-M-+                                 |   
   |                                               '-G-'                                 |   
   |            .-(1)-------.                                                            |   
   +-+-GRAPHIC--+-----------+-------+----------------------------------------------------+   
   | |          '-(integer)-'       |                                                    |   
   | +-VARGRAPHIC--(--integer--)----+                                                    |   
   | |         .-(1M)-------------. |                                                    |   
   | '-DBCLOB--+------------------+-'                                                    |   
   |           '-(integer-+---+-)-'                                                      |   
   |                      +-K-+                                                          |   
   |                      +-M-+                                                          |   
   |                      '-G-'                                                          |   
   |           .-(1)-------.                                                             |   
   +-+-BINARY--+-----------+-------------------------+-----------------------------------+   
   | |         '-(integer)-'                         |                                   |   
   | +-+-BINARY VARYING-+-(integer)------------------+                                   |   
   | | '-VARBINARY------'                            |                                   |   
   | |                          .-(1M)-------------. |                                   |   
   | '-+-BINARY LARGE OBJECT-+--+------------------+-'                                   |   
   |   '-BLOB----------------'  '-(integer-+---+-)-'                                     |   
   |                                       +-K-+                                         |   
   |                                       +-M-+                                         |   
   |                                       '-G-'                                         |   
   |              .-(--6--)-------.  .-WITHOUT TIME ZONE-.                               |   
   +---TIMESTAMP--+---------------+--+-------------------+-------------------------------+   
   |              '-(--integer--)-'  '-WITH TIME ZONE----'                               |   
   '-XML--+-----------------------------+------------------------------------------------'   
          '-(--| XML-type-modifier |--)-'                                                    

変更の始まり

XML-type-modifier:

変更の終わり
              .-,-------------------------------------------------------.   
              V                                                         |   
>>-XMLSCHEMA----| XML-schema-specification |--+-----------------------+-+-><
                                              '-ELEMENT--element-name-'     

変更の始まり

XML-schema-specification:

変更の終わり
>>-+-ID--registered-XML-schema-name---------------------------+-><
   '-+-URL--target-namespace-+--+---------------------------+-'   
     '-NO NAMESPACE----------'  '-LOCATION--schema-location-'     

identity-alteration:

   .---------------------------------------------.   
   V  (1)                                        |   
>>-------+-RESTART--+------------------------+-+-+-------------><
         |          '-WITH -numeric-constant-' |     
         +-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----'                         

注:
  1. 少なくとも 1 つのオプションを指定する必要があり、同じ節を複数回指定することはできません。
unique-constraint:

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

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

referential-constraint:

                                                (1)   
>>-+-----------------------------+--FOREIGN KEY----------------->
   '-CONSTRAINT -constraint-name-'                    

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

注:
  1. 前のリリースとの互換性のために 、CONSTRAINT 文節 (上記参照) が指定されていない場合 、FOREIGN KEY の後に constraint-name を指定することができます。
references-clause:

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

                                 .-ENFORCED-----.   
>--+--------------------------+--+--------------+--------------->
   '-ON DELETE -+-RESTRICT--+-'  '-NOT ENFORCED-'   
                +-NO ACTION-+                       
                +-CASCADE---+                       
                '-SET NULL--'                       

   .-ENABLE QUERY OPTIMIZATION-.   
>--+---------------------------+-------------------------------><

check-constraint:

>>-+-----------------------------+--CHECK--(check-condition)---><
   '-CONSTRAINT -constraint-name-'                             

partitioning-clause:

                .-,------------------------.     
   .-RANGE-.    V                          |     
>>-+-------+--(---| partition-expression |-+-)------------------>

     .-,---------------------.     
     V                       |     
>--(---| partition-element |-+-)-------------------------------><

partition-expression:

                .-NULLS LAST-.  .-ASC--.   
>>-column-name--+------------+--+------+-----------------------><
                                '-DESC-'   

partition-element:

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

>--+----------------------------+------------------------------><
   '-HASH SPACE--integer--+-K-+-'   
                          +-M-+     
                          '-G-'     

partition-clause:

                       .-,------------.                  (1)       
             .-AT-.    V              |    .-INCLUSIVE-------.     
>>-+-ENDING--+----+--(---+-constant-+-+-)--+-----------------+-+-><
   |                     +-MAXVALUE-+                          |   
   |                     '-MINVALUE-'                          |   
   |                            (2)                            |   
   '-HASH SPACE--integer--+-K-+--------------------------------'   
                          +-M-+                                    
                          '-G-'                                    

注:
  1. 増加対応パーティション表スペースに対して ENDING 節を指定しないでください。ただし、範囲パーティション化表スペースに対しては指定する必要があります。
  2. HASH SPACE 節は、ALTER PARTITION 節に対してのみ指定できます。
partition-rotation:

                     .-,------------.                           
           .-AT-.    V              |    .-INCLUSIVE-.          
>>-ENDING--+----+--(---+-constant-+-+-)--+-----------+--RESET--><
                       +-MAXVALUE-+                             
                       '-MINVALUE-'                             

materialized-query-definition:

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

refreshable-table-options:

>>-DATA INITIALLY DEFERRED--REFRESH DEFERRED-------------------->

   .----------------------------------------.   
   V  (1)                                   |   
>--------+--------------------------------+-+------------------><
         | .-MAINTAINED BY SYSTEM-.       |     
         +-+----------------------+-------+     
         | '-MAINTAINED BY USER---'       |     
         | .-ENABLE QUERY OPTIMIZATION--. |     
         '-+----------------------------+-'     
           '-DISABLE QUERY OPTIMIZATION-'       

注:
  1. 同じ文節を複数回指定しないでください。
materialized-query-table-alteration:

        .----------------------------------------.   
        V  (1)                                   |   
>>-SET--------+-+-MAINTAINED BY SYSTEM-+-------+-+-------------><
              | '-MAINTAINED BY USER---'       |     
              '-+-ENABLE QUERY OPTIMIZATION--+-'     
                '-DISABLE QUERY OPTIMIZATION-'       

注:
  1. 同じ文節を複数回指定しないでください。
period-definition:

>>-+-SYSTEM_TIME---+-------------------------------------------->
   '-BUSINESS_TIME-'   

>--(--begin-column-name--,--end-column-name--)-----------------><

organization-clause:

              .-,-----------.      
              V             |      
>>-UNIQUE--(----column-name-+--)-------------------------------->

   .-HASH SPACE--64--M----------.   
>--+----------------------------+------------------------------><
   '-HASH SPACE--integer--+-K-+-'   
                          +-M-+     
                          '-G-'     

説明

table-name
変更の始まり変更する表を指定します。この名前は、現行サーバーに存在する表を示すものでなければなりません。変更の始まりこの名前は、宣言済み一時表、ディレクトリー表、ビュー、XML 列用に暗黙的に作成された表を示すものであってはなりません。変更の終わり 名前がカタログ表を識別する場合 、指定できる文節は DATA CAPTURE CHANGES だけです。名前がアクセラレーターのみの表を識別する場合は、指定できる文節は ADD RESTRICT ON DROP または DROP RESTRICT ON DROP だけです。
table-name に補助表を指定すると、変更は以下の文節に制限されます。
  • APPEND
table-name にマテリアライズ照会表を指定すると、変更は次の文節によって制限されます。
  • AUDIT
  • DATA CAPTURE
  • ALTER MATERIALIZED QUERY
  • DROP MATERIALIZED QUERY
  • ADD RESTRICT ON DROP
  • DROP RESTRICT ON DROP
変更の終わり

ADD COLUMN

ADD COLUMN column-definition
表に列を追加します。次の列を除いて、既存の行にある列の値はすべて、そのデフォルト値に設定されます。
  • ROWID 列
  • ID 列
  • 行変更タイム・スタンプ列
  • 行開始列
  • 行終了列
  • トランザクション開始 ID 列

表に n 個 の列がある場合、新しい列の順序は n+1 になります。n の値は、749 より大きく指定できません。従属表では、n が 748 を超えてはいけません。

列の合計バイト・カウントが増えることによって最大行サイズを超えてしまう場合には、列の追加はできません。 表の最大行サイズは、最大レコード・サイズに記載された最大レコード・サイズから 8 を引いた大きさです。

LOB 列を追加する場合、表にまだ ROWID 列がなければ、DB2® は隠し ROWID 列を作成します。 暗黙的に作成される可能性がある、または明示的に作成する必要がある他のオブジェクトなど、LOB 列の追加の詳細については、LOB 列を使って表を作成を参照してください。 ROWID 列の追加の詳細については、ROWID 列の追加を参照してください。

暗黙的に作成された LOB オブジェクトの場合、その特権セットで必要となるのは、その表 (このデータベースが暗黙的に作成されている場合は、DSNDB04) を含む データベース上での CREATETAB と CREATETS 特権であり、バッファー・プール上と、補助表および LOB 表スペースで使用するストレージ・グループ上での USE 特権です。暗黙的に作成されたオブジェクトは基本表の所有者が所有します。

XML 列を追加する場合、その特権セットで必要となるのは、その表 (このデータベースが暗黙的に作成されている場合は、DSNDB04) を含むデータベース上での CREATETAB と CREATETS 特権であり、 追加対象の最初の DOCID に対してはその基本表上での INDEX であり、バッファー・プール上と、XML オブジェクトが使用するストレージ・グループ上での USE 特権です。これらの特権は、暗黙的に作成された XML オブジェクトに対して必要です。暗黙的に作成されたオブジェクトは基本表の所有者が所有します。

列を表に追加する時は、その表スペースは REORG ペンディング通知状態になります。

変更の始まり表は履歴表であってはなりません。変更の終わり

変更の始まり表がシステム期間テンポラル表である場合、関連する履歴表にも列が追加されます。履歴表内の列の以下の属性は、システム期間テンポラル表の対応する列の属性と同じです。変更の終わり

変更の始まり
  • 名前
  • データ・タイプ
  • 長さ (インライン LOB 長を含む)、精度、位取り
  • 文字ストリング列の FOR BIT、SBCS、または MIXED DATA 属性
  • NULL 属性
  • 非表示属性
  • フィールド手順
変更の終わり

以下の列は追加できません。

  • WITH ROW ATTRIBUTES として定義されている編集プロシージャーを持つ表への列の追加。
  • 既に明示的に定義された ROWID 列がある表への ROWID 列の追加
  • ID 列を持つ表への ID 列の追加
  • 既にセキュリティー・ラベル列がある表へのセキュリティー・ラベル列の追加
  • 変更の始まりシステム期間テンポラル表へのセキュリティー・ラベル列の追加変更の終わり
  • 行変更タイム・スタンプ列を既に保有する表への行変更タイム・スタンプ列の追加
  • 作成済みの一時表への LOB、ROWID、ID 列、または行変更タイム・スタンプ列
  • GRAPHIC、VARGRAPHIC、DBCLOB、または CHAR FOR MIXED DATA 列の追加 (インストール・オプション MIXED DATA の設定が NO の場合)

変更の始まりセキュリティー・ラベル列を追加する場合、その表に対する行の許可 (デフォルトの行の許可を含む) は存在できません。変更の終わり

column-name
変更の始まり表に追加したい列の名前。この名前は、表の既存の列の名前または表内の期間の名前と同じであってはなりません。SYSTEM_TIME または BUSINESS_TIME という名前の列は、システム期間テンポラル表または履歴表として定義された表には追加できません。column-name は修飾しないでください。変更の終わり
data-type
列のデータ・タイプを指定します。データ・タイプは、組み込みデータ・タイプまたは特殊タイプにすることができます。
built-in-type
列のデータ・タイプが組み込みデータ・タイプの 1 つであることを 指定します。表に列を追加時に使用可能な組み込みデータ・タイプに関しては、built-in-type を参照してください。
distinct-type-name
列の特殊タイプ (ユーザー定義データ・タイプ) を指定します。列の長さと位取りは、それぞれ特殊タイプのソース・タイプの長さと位取りです。 特権セットには、特殊タイプの USAGE 特権が暗黙的または明示的に含まれている必要があります。

特殊タイプのコード化スキームは表のコード化スキームと同じでなければなりません。

列を参照制約の外部キー の定義で使用する場合、親キーの対応する列のデータ・タイプは同じ特殊タイプを持つ必要があります。

NOT NULL
列が NULL 値を含まないようにします。NOT NULL を指定する場合、列が行 ID データ・タイプを持つか または ID 列である場合を除き、DEFAULT 文節を使用して、 列に非 NULL 値のデフォルト値を指定しなければなりません。ROWID 列の場合は NOT NULL を指定しなければならず 、DEFAULT を指定してはいけません。ID 列の場合は NOT NULL を指定できますが、DEFAULT を指定してはいけません。
DEFAULT
データ変更ステートメント、または LOAD に値が指定されていない場合に列に割り当てられるデフォルト値を指定します。以下のタイプの列に対しては、DEFAULT を指定しないでください。
  • ROWID 列 (DB2 がデフォルト値を生成)
  • ID 列 (DB2 がデフォルト値を生成)
  • XML 列
  • 行変更タイム・スタンプ列

セキュリティー・ラベル列の DEFAULT キーワードの後には、値を指定しないでください。DB2 によって、セキュリティー・ラベル列のデフォルトが提供されます。

DEFAULT キーワードの後に値が指定されていない場合、デフォルト値として使用される値は、次のように列のデータ・タイプによって異なります。

データ・タイプ
デフォルト値
数値
0
固定長の文字ストリングまたはグラフィック・ストリング
ブランク
固定長バイナリー・ストリング
16 進数のゼロ
可変長ストリング
長さが 0 のストリング
変更の始まりインライン BLOB変更の終わり
変更の始まり16 進数のゼロ変更の終わり
変更の始まりインライン CLOB変更の終わり
変更の始まりブランク変更の終わり
変更の始まりインライン DBCLOB変更の終わり
変更の始まりブランク変更の終わり
日付
既存の行の場合は、0001 年 1 月 1 日に対応する日付。追加される行の場合は、CURRENT DATE。

変更の始まりこの文節またはキーワードを使用すると、ターゲット・オブジェクトに依存するパッケージや、カスケード効果により、その関連オブジェクトに依存するパッケージが無効になることがあります。パッケージを無効化する変更を参照してください。変更の終わり

時刻
既存の行の場合は、0 時 0 分 0 秒に対応する時刻。追加される行の場合は、CURRENT TIME。

変更の始まりこの文節またはキーワードを使用すると、ターゲット・オブジェクトに依存するパッケージや、カスケード効果により、その関連オブジェクトに依存するパッケージが無効になることがあります。パッケージを無効化する変更を参照してください。変更の終わり

変更の始まりタイム・ゾーンなしのタイム・スタンプ変更の終わり
変更の始まり既存の行の場合は、0001 年 1 月 1 日に対応する日付、およ び 0 時 0 分 0 秒に対応する時刻と、タイム・スタンプ精度までの端数秒のゼロ。追加行の場合は、CURRENT_TIMESTAMP(p) WITHOUT TIME ZONE。ここで、p は対応するタイム・スタンプ精度です。変更の始まりこの文節またはキーワードを使用すると、ターゲット・オブジェクトに依存するパッケージや、カスケード効果により、その関連オブジェクトに依存するパッケージが無効になることがあります。パッケージを無効化する変更を参照してください。変更の終わり変更の終わり
変更の始まりタイム・ゾーン付きのタイム・スタンプ変更の終わり
変更の始まり既存の行の場合は、0001 年 1 月 1 日に対応する日付、およ び 0 時 0 分 0 秒に対応する時刻と、タイム・スタンプ精度までの端数秒のゼロ、タイム・ゾーン 0 時、タイム・ゾーン 0 分。追加行の場合は、CURRENT_TIMESTAMP(p) WITH TIME ZONE。ここで、p は対応するタイム・スタンプ精度です。

列がタイム・ゾーン付きのタイム・スタンプとして定義されている場合は、デフォルト値にタイム・ゾーンが含まれていなければなりません。

変更の始まりこの文節またはキーワードを使用すると、ターゲット・オブジェクトに依存するパッケージや、カスケード効果により、その関連オブジェクトに依存するパッケージが無効になることがあります。パッケージを無効化する変更を参照してください。変更の終わり

変更の終わり

所定の列定義では、次のことが言えます。

  • DEFAULT と FIELDPROC を両方とも指定することはできません。
  • NOT NULL と DEFAULT NULL を両方とも指定することはできません。
  • ID 列以外の列で NOT NULL と DEFAULT を省略すると、 暗黙的に DEFAULT NULL を指定したことになります。ID 列の場合は、暗黙的に NOT NULL を指定したことになり 、DB2 はデフォルト値を生成します。

変更の始まり上記以外のデフォルト値は、以下のいずれかの形式で指定することができます。変更の終わり

  • デフォルト値を空ストリングにする場合は WITH DEFAULT
  • デフォルト値を NULL にする場合は DEFAULT NULL
constant
列のデフォルト値として定数を指定します。定数の値は、その値を列に割り当てるときの規則に適合して いなければなりません。

文字定数またはストリング定数の長さは、その UTF-8 表現に必要なバイト数が 1536 バイトを超えないようにする必要があります。16 進グラフィック・ストリング (GX) 定数は指定できません。

変更の始まりまた、定数値の長さが、LOB 列の INLINE LENGTH 属性を超えることはできません。変更の終わり

SESSION_USER または USER
SQL データ変更ステートメントまたは LOAD 時点での SESSION_USER (USER) 特殊レジスターの値を、列のデフォルトとして指定します。SESSION_USER を指定する場合、列のデータ・タイプは、値を CCSID 37 で表現するときは 8 文字以上の長さ属性をもつ文字ストリングでなければなりません。変更の始まり列のデータ・タイプがインライン CLOB である場合に値を CCSID 37 で表現する場合、INLINE LENGTH 属性は、8 文字以上でなければなりません。変更の終わり既存の行の場合は、その値は ALTER TABLE ステートメントが 処理される時点の SESSION_USER 特殊レジスターの値になります。
CURRENT SQLID
列のデフォルトとして、SQL データ変更ステートメントまたは LOAD 時点で処理の SQL 許可 ID 値 を指定します。CURRENT SQLID を指定する場合、列のデータ・タイプは、CURRENT SQLID 特殊レジスターの長さ属性以上の長さ属性をもつ文字ストリングでなければなりません。変更の始まり列のデータ・タイプがインライン CLOB である場合、INLINE LENGTH 属性は、CURRENT SQLID 特殊レジスターの長さ属性以上でなければなりません。変更の終わり既存の行の場合は、その値は ALTER TABLE ステートメントが処理される時点の処理の SQL 許可 ID になります。
NULL
列のデフォルト値として NULL を指定します。
cast-function-name
列の特殊タイプの名前と一致する cast 関数の名前。cast 関数は、列のデータ・タイプが特殊タイプである場合にだけ使用できます。
cast 関数のスキーマ名は、明示的に指定されているか、または関数解決を介して暗黙的に解決されるかに関係なく、特殊タイプの 明示的または暗黙的に指定されているスキーマ名と同じでなければなりません。
constant
引数として定数を指定します。この定数は、特殊タイプのソース・タイプの定数に関する規則に準拠している必要があります。変更の始まり定数の長さが、LOB 列の INLINE LENGTH 属性を超えることはできません。変更の終わり
SESSION_USER または USER
変更の始まり行が挿入された時点での SESSION_USER (USER) 特殊レジスターの値を、列のデフォルトとして指定します。 列の特殊タイプのソース・タイプは、SESSION_USER 特殊レジスターの長さ属性以上の長さ属性 (CLOB の場合はインライン長さ属性) を持つ CHAR、VARCHAR、またはインライン CLOB でなければなりません。変更の終わり
CURRENT SQLID
行が挿入された時点での CURRENT SQLID 特殊レジスターの値を、列のデフォルトとして指定します。 列の特殊タイプのソース・タイプは、CURRENT SQLID 特殊レジスターの長さ属性以上の長さ属性 (または CLOB の場合はインライン長さ属性) を持つ CHAR、VARCHAR、またはインライン CLOB でなければなりません。
NULL
引数として NULL 値を指定します。
GENERATED
DB2 が列の値を生成することを示します。

変更の始まりGENERATED は、次の列にのみ適用できます。変更の終わり

  • ROWID 列
  • ID 列
  • 行変更タイム・スタンプ列
  • 行開始列
  • 行終了列
  • トランザクション開始 ID 列
変更の始まり表がシステム期間テンポラル表またはアーカイブ対応表である場合、列が ROWID 列でない限り、追加される列に対して GENERATED を指定することはできません。デフォルトは GENERATED ALWAYS です。変更の終わり
ALWAYS
行を表に挿入時に、DB2 が列の値を生成するように指定します。データ伝搬を使用する場合を除いて、ALWAYS が推奨値です。
BY DEFAULT
データ変更ステートメント上で列に対して値を指定済みの場合を除き、行の挿入時に DB2 が列の値を生成することを指定します。

ROWID 列にユーザー提供の値が指定されている場合、DB2 は、次の両方の条件を満たす場合にのみ値を使用します。

  • 値が、DB2 によって以前に生成された有効な行 ID 値である。
  • 列に固有の単一列の索引がある。

ROWID 列にこの索引が作成されるまで、挿入操作、更新操作、および LOAD ユーティリティーを使用して表に行を追加することはできません。この表スペース名が CREATE TABLE ステートメント上に無指定の場合、DB2 は、表を完全にするのに必要なオブジェクト (その索引を含む) を暗黙的に作成します。この索引の名前は、「I」の後に列名の最初の 10 文字を続け、さらにランダムに生成された 7 文字が続いたものです。 列名が 10 文字より短い場合、DB2 は名前の最後に 10 文字になるまで下線文字を追加します。暗黙的に作成された索引の属性は COPY NO です。

ID 列の場合、DB2 は指定された値を挿入しますが、ID 列に固有な単一列の索引がない限り、その値が列に固有な値であることを確かめません。

ID 列に対してユーザー提供の値が指定されている場合、DB2 は指定された値を挿入しますが、すべての列に対して実行される通常の検証以外に、その値に関して特別な検証は実行しません。DB2 は、ID 列に対して定義された順次プロパティーに指定値がどのように影響するか検査しません。GENERATED BY DEFAULT として定義された ID 列の固有性を保証するには、ID 列に対してユニーク索引を定義します。

データ伝搬を使用する場合のみ、BY DEFAULT が推奨値です。

AS IDENTITY
列が表の ID 列であることを指定します。表には 1 つの ID 列しか入りません。AS IDENTITY が指定できるのは、列のデータ・タイプが位取りゼロの正確な数値タイプ (SMALLINT、INTEGER、BIGINT、位取りゼロの DECIMAL、またはこれらのタイプの 1 つに基づく特殊タイプ) である場合に限定されます。ID 列を定義するときに、ID 列の属性指定の間に入れる分離文字コンマはオプションです。

ID 列は暗黙的に NOT NULL になります。ID 列を表に追加するときには、GENERATED ALWAYS または GENERATED BY DEFAULT も指定する必要があります。

列を AS IDENTITY として定義しても、値が固有であることは必ずしも保証されません。確実に固有な値を得るには、単一列のユニーク索引を ID 列に対して定義してください。

START WITH numeric-constant
ID 列に生成される最初の値を指定します。 この値は、列に割り当て可能な正または負の値で、小数点の右側にゼロ以外の数字がないように指定します。

ID 列の定義時に値を明示的に指定しないと、昇順の ID 列の場合は MINVALUE、 降順の ID 列の場合は MAXVALUE がデフォルトになります。この値は、ID 列の最大値または最小値に達した後に循環先となる値であるとは限りません。変更の始まりnumeric-constant 値は、MAXVALUE および MINVALUE による制約を受けません。 つまり、START WITH 文節を使用して、循環に使用される範囲外の値の生成を開始することができます。ただし、指定された START WITH 値の後、次に生成される値は、昇順の ID 列の場合は MINVALUE、降順の ID 列の場合は MAXVALUE になります。変更の終わり

INCREMENT BY numeric-constant
ID 列の連続する値の間隔を指定します。 この値は、長精度整数定数の値を超えない、列に割り当て可能な、小数点の右側にゼロ以外の数字を持たない任意の正または負の値 (0 を含む) です。 デフォルトは、1 です。

値が正またはゼロの場合、ID 列の値の順序は昇順になります。 値が負の場合、値の順序は降順になります。

MINVALUE または NO MINVALUE
降順の ID 列が循環するか値の生成を停止する最小値、または昇順の ID 列が最大値に達した後で循環する先の最小値を指定します。
NO MINVALUE
ID 列の値の範囲に最小端点を設定しないように指定します。この場合、MINVALUE のデフォルト値は次のいずれかの値になります。
  • 昇順の ID 列の場合、値は START WITH の値、または 1 (START WITH が指定されていない場合)。
  • 降順の ID 列の場合、値は列のデータ・タイプの最小値。
MINVALUE numeric-constant
この ID 列に生成される最小値である数値定数を指定します。この値は、この列に割り当て可能な正または負の値で、小数点の右側にゼロ以外の数字がないように指定します。 値は、最大値以下にする必要があります。

変更の始まりMINVALUE は、START WITH または RESTART WITH に指定される値を制約しません。ただし、指定された START WITH 値または RESTART WITH 値の後、次に生成される値は、昇順の ID 列の場合は MINVALUE、降順の ID 列の場合は MAXVALUE になります。変更の終わり

MAXVALUE または NO MAXVALUE
昇順の ID 列が循環するか値の生成を停止する最大値、または降順の ID 列が最小値に達した後で循環する先の最大値を指定します。
NO MAXVALUE
ID 列の値の範囲に最小端点を設定しないように指定します。この場合、MAXVALUE のデフォルト値は次のいずれかの値になります。
  • 昇順の ID 列の場合、値は列のデータ・タイプの最大値。
  • 降順の ID 列の場合、値は START WITH の値、または -1 (START WITH が指定されていない場合)。
MAXVALUE numeric-constant
この ID 列に生成される最大値である数値定数を指定します。この値は、この列に割り当て可能な正または負の値で、小数点の右側にゼロ以外の数字がないように指定します。 値は、最小値以上にする必要があります。

変更の始まりMAXVALUE は、START WITH または RESTART WITH に指定される値を制約しません。ただし、指定された START WITH 値または RESTART WITH 値の後、次に生成される値は、昇順の ID 列の場合は MINVALUE、降順の ID 列の場合は MAXVALUE になります。変更の終わり

CYCLE または NO CYCLE
この ID 列が、最大値または最小値のいずれかに達した後で、引き続いて値を生成するかどうかを指定します。
NO CYCLE
最大値または最小値に達した後、ID 列に値を生成しないことを指定します。 NO CYCLE が デフォルトです。
CYCLE
最大値または最小値に達した後も、この列について値の生成を継続することを指 定します。 このオプションを使用すると、昇順の ID 列が最大値に達した後、最小値が生成されます。 降順の ID 列が最小値に達した後は、最大値が生成されます。ID 列の最大値と最小値により、循環に使用される範囲が決まります。

CYCLE が有効であるとき、DB2 は ID 列に対して重複する値を生成する可能性があります。ただし、ID 列にユニーク索引が存在する場合に、この列に対して固有でない値が生成されると、エラーが起こります。

CACHE または NO CACHE
メモリー内に事前に割り振られている値を保持するかどうかを指定します。キャッシュに値を事前に割り振って保管しておくと、行を表に挿入する際のパフォーマンスが向上します。デフォルトは CACHE 20 です。
NO CACHE
ID 列の値をキャッシュに事前に割り振って保管しないように指定し、システム障害が発生したときに値が失われないようにします。この場合、ID 列の新しい値の要求が行われるたびに同期入出力が発生します。
CACHE integer-constant
DB2 がメモリーに事前に割り振って保管できる ID 列シーケンスの値の最大数を指定します。

システム障害時に、キャッシュに入っていてまだ割り当てられていないすべての ID 列 は失われ、使用できなくなります。そのため、CACHE に指定される値は、システム障害時に失われる可能性がある ID 列の値の最大数も表しています。

最小値は 2 です。

データ共用環境では、CACHE オプションと NO ORDER オプションを使用して、 複数の DB2 メンバーがシーケンス値を同時にキャッシュに入れることを許可できます。

ORDER または NO ORDER
ID 列の値を要求の順序どおりに生成する必要があるかどうかを指定します。デフォルトは NO ORDER です。
NO ORDER
値を要求の順序どおりに生成する必要がないことを指定します。
ORDER
値を要求の順序どおりに生成するように指定します。ORDER を指定すると、値のキャッシングが使用不可になる場合があります。ORDER は、単一アプリケーション・プロセスのみに適用されます。

データ共用環境では、CACHE オプションと NO ORDER オプションが有効になっていると、複数のキャッシュが同時にアクティブになる可能性があり、 別の DB2 メンバーからの IDENTITY 値の要求が、 厳密な数値順に値を割り当てない場合があります。例えば、メンバー DB2A および DB2B が ID 列を使用し、DB2A がキャッシュ値 1 から 20 を取得し、DB2B がキャッシュ値 21 から 40 を取得すると仮定します。 最初に DB2A が値を要求してから DB2B が要求し、その後 DB2A が再び要求した場合は、割り当てられる値の実際の順序は、1、21、2 になります。 このため、同じ ID 列を使用する複数の DB2 メンバー間で、IDENTITY 値が厳密な数値順に生成されることを保証するには、ORDER オプションを指定します。

FOR EACH ROW ON UPDATE AS ROW CHANGE TIMESTAMP
この文節で指定することは、この列がタイム・スタンプであり、その値を DB2 が生成するということです。DB2 は、ある行の挿入時に各行ごとにその列に対する値を生成します。また、どの列を更新する場合もその対象となるすべての行に対して値を生成します。 行変更タイム・スタンプ列に対して生成される値は、その行の挿入または更新の時刻に対応したタイム・スタンプです。単一ステートメントを使って複数行を挿入または更新すると、行変更タイム・スタンプ列の値は各行ごとに異なる可能性があります。

変更の始まり行変更タイム・スタンプ列を既存の表に追加することは、既存の行が影響を受ける可能性があり、REORG が完了するまで表スペースに対して AREO* 状態が設定される可能性があることを意味します。既存の行ごとに、タイム・スタンプ値が新規行変更タイム・スタンプ列に割り当てられます。変更の終わり

変更の始まりdata-type を指定する場合、これは精度 6 の TIMESTAMP WITHOUT TIME ZONE でなければなりません。変更の終わり行変更タイム・スタンプ列とともに NOT NULL を指定する必要があります。

変更の始まりAS ROW BEGIN変更の終わり
変更の始まり行が挿入されるとき、または行内の列が更新されるときに、列のデータ・タイプの値が割り当てられるように指定します。TIMESTAMP WITHOUT TIME ZONE 列に割り当てられる値は TIMESTAMP 値 '9999-12-30-00.00.00.000000000000' です。TIMESTAMP WITH TIME ZONE 列に割り当てられる値は TIMESTAMP 値 '9999-12-30.00.00.00.000000000000 +00:00' です。

row-begin 列は、システム期間テンポラル表で使用するためのものです。

表に含めることができるのは 1 つの row-begin 列だけです。data-type が指定されていない場合、列は TIMESTAMP(12) WITHOUT TIME ZONE として定義されます。data-type が指定されている場合は、TIMESTAMP(12) WITHOUT TIME ZONE または TIMESTAMP(12) WITH TIME ZONE でなければなりません。 列を TIMESTAMP WITH TIME ZONE として定義すると、値は +00:00 のタイム・ゾーンを使用して UTC に保管されます。この列には DEFAULT 文節を指定できないため、NOT NULL と定義する必要があります。

row-begin 列を更新することはできません。

行開始列の値は、データ共有メンバーあたり、トランザクションあたり固有の TIMESTAMP(9) 値と、その後のデータ共有メンバー番号を示す 3 桁で構成されます。

変更の終わり
変更の始まりAS ROW END変更の終わり
変更の始まり行が挿入されるとき、または行内の列が更新されるときに、列のデータ・タイプの値が割り当てられるように指定します。タイム・ゾーンなしのタイム・スタンプ列に割り当てられる値は TIMESTAMP '9999-12-30-00.00.00.000000000000' です。タイム・ゾーン付きのタイム・スタンプ列に割り当てられる値は TIMESTAMP '9999-12-30.00.00.00.000000000000 +00:00' です。

row-end 列は、システム期間テンポラル表で使用するためのものです。

システム期間データがバージョン管理される表では、更新操作または削除操作の結果として行が削除されると、履歴行の row-end 列の値に、行がいつ削除されたかが反映されます。履歴行の列に生成される値は、トランザクションに関連付けられた最新のトランザクション開始時刻に対応するタイム・スタンプです。行が更新される結果、row-end 列の値が、対応する row-begin 列の値以下になる場合、row-end 列のタイム・スタンプ値が調整されます。単一の SQL ステートメントで複数の行が削除される場合、履歴行の列の値は同じになります。

表に含めることができるのは 1 つの row-end 列だけです。data-type が指定されていない場合、列は TIMESTAMP(12) WITHOUT TIME ZONE として定義されます。data-type が指定されている場合は、TIMESTAMP(12) WITHOUT TIME ZONE または TIMESTAMP(12) WITH TIME ZONE でなければなりません。 列を TIMESTAMP WITH TIME ZONE として定義すると、値は +00:00 のタイム・ゾーンを使用して UTC に保管されます。列に DEFAULT 文節を指定することはできません。

row-end 列を更新することはできません。

変更の終わり
変更の始まりAS TRANSACTION START ID変更の終わり
変更の始まり行が挿入されるかまたは行のいずれかの列が更新されるときにタイム・スタンプ値を割り当てることを指定します。row-begin 列の値が、他のトランザクション用に生成される row-begin 列値に対して固有である場合、row-begin 列値は transaction-start-ID 列に割り当てられます。 それ以外の場合、transaction-start-ID 列値は row-begin 列値から派生し、他のトランザクション用に生成される transaction-start-ID 列の値に対して固有になるように調整されます。

transaction-start-ID 列は、システム期間テンポラル表で使用するためのものです。

表に含めることができるのは 1 つの transaction-start-id 列だけです。data-type が指定されていない場合、列は TIMESTAMP(12) WITHOUT TIME ZONE として定義されます。data-type が指定されている場合は、TIMESTAMP(12) WITHOUT TIME ZONE または TIMESTAMP(12) WITH TIME ZONE でなければなりません。 列を TIMESTAMP WITH TIME ZONE として定義すると、値は +00:00 のタイム・ゾーンを使用して UTC に保管されます。列に DEFAULT 文節を指定することはできません。

transaction-start-id 列を更新することはできません。

変更の終わり
IMPLICITLY HIDDEN
この列は、名前で明示的に参照しない限り、SQL ステートメントのこの実行結果では認識できません。例えば、表 T1 には、IMPLICITLY HIDDEN 文節で定義された列が含まれていると仮定します。 SELECT * FROM T1 の実行結果には、暗黙的な非表示列は含まれません。ただし、暗黙的に非表示列の名前を明示的に参照する SELECT ステートメントの結果は、結果表の中にその列を含みます。

IMPLICITLY HIDDEN は、ROWID として定義される列、または ROWID に基づく特殊タイプに対して指定してはいけません。

column-constraint
これは、1 つの列からなる制約を定義する簡便な手段です。列 C の定義に column-constraint を指定すると、列 C を唯一の列として示した unique-constraintreferential-constraint、または check-constraint としてその制約を指定した場合と同じ効果が得られます。
references-clause
column-definitionreferences-clause を 指定すると、単一列で構成されている外部キーの定義が簡略化されます。したがって、列 C の定義で references-clause を指定すると、C が唯一の 識別される列である FOREIGN KEY 文節の一部として references-clause を指 定した場合と同じ効果があります。
以下のタイプの列の定義には references-clause を指定しないでください。これらのタイプの列を外部キーにすることはできないからです。
  • LOB 列
  • ROWID 列
  • XML 列
  • DECFLOAT 列
  • 行変更タイム・スタンプ列
  • セキュリティー・ラベル列
check-constraint
column-definitioncheck-constraint を 指定すると、別の ADD check-constraint 文節でチェック制約を指定する場合と同じ効果があります。SQL 標準に準拠するためには、列 C の定義で指定したチェック制約は、C 以外の列を参照してはなりません。
以下のタイプの列の定義では、チェック制約を指定しないでください。
  • LOB 列
  • ROWID 列
  • XML 列
  • DECFLOAT 列
  • セキュリティー・ラベル列
AS SECURITY LABEL
表に対して行レベルの細分性のマルチレベル・セキュリティーを定義し、列にセキュリティー・ラベル値を格納するように指定します。 表にはセキュリティー・ラベル列を 1 つだけ指定できます。表にセキュリティー・ラベル列を定義するには、ステートメントの 1 次許可 ID に有効なセキュリティー・ラベルがあり 、RACF® SECLABEL クラスがアクティブになっている必要があります。また、次の条件も満たしている必要があります。
  • 列のデータ・タイプが CHAR(8) である。
  • 列のサブタイプが SBCS である。
  • 列にフィールド・プロシージャー、チェック制約、または参照制約が指定されていない。
  • 列が NOT NULL 文節と WITH DEFAULT 文節を使用して定義されている。
  • WITH DEFAULT 文節は、デフォルト値を使って指定しないでください (DB2 がデフォルト値を提供します)。
  • 表に、WITH ROW ATTRIBUTES として定義されている編集プロシージャーがない。
  • 表がマテリアライズ照会表のソース表でない。

表の既存の行に対するセキュリティー・ラベル列の値のデフォルトは、ALTER ステートメントを実行した時点でのユーザーのセキュリティー・ラベルです。

FIELDPROC program-name
列のフィールド・プロシージャー出口ルーチンとして、 program-name を指定します。フィールド・プロシージャーは、長さ属性が 255 バイト以下の列に対してのみ指定できます。FIELDPROC は、組み込み文字ストリング・データ・タイプまたはグラフィック・ストリング・データ・タイプの列に対してのみ指定できます。 列は、以下のいずれかであってはなりません。
  • LOB 列
  • セキュリティー・ラベル列
  • 行変更タイム・スタンプ列
  • 変更の始まりTIMESTAMP WITH TIME ZONE データ・タイプの列変更の終わり

このフィールド・プロシージャーは列の値のエンコードとデコードを行います。列に値が挿入されるときは、フィールド・プロシージャーに渡されてエンコードされて から挿入されます。列に入っている値がプログラムで使用されるときは、フィールド・プロシージャー に渡されてデコードされてから使用されます。フィールド・プロシージャーは、例えば、列に入力された値の ソート・シーケンスを変更するのに使用することができます。

また、フィールド・プロシージャーは、ALTER TABLE ステートメントの処理中にも呼び出されます。 この呼び出しの場合、プロシージャー は DB2 に列のフィールド記述 を 提供します。フィールド記述は、エンコードされた値のデータ特性を定義します。逆に、ALTER TABLE ステートメントの中で列について指定する 情報は、デコードされた値のデータ特性を定義します。

FIELDPROC を省略した場合、列はフィールド・プロシージャーを持ちません。

constant
これは、呼び出されたときにフィールド・プロシージャーに渡されるパラメーターです。パラメーター・リストはオプションです。ALTER TABLE の FIELDPROC 文節で指定した n 番目のパラメーター は、指定したフィールド・プロシージャーの n 番目 のパラメーターに対応しています。パラメーター・リストの最長は 255 バイトです。コンマは この長さに含まれますが、無意味なブランクや区切りの括弧は含まれません。
変更の始まりINLINE LENGTH integer変更の終わり
変更の始まり列が LOB 列であり、表がユニバーサル表スペースに存在する場合の列の最大長を指定します。列が LOB 列 (または LOB に基づく特殊タイプ) でない場合、表がユニバーサル表スペースでない場合、または表がアクセラレーターのみの表である場合は、INLINE LENGTH を指定できません。

BLOB 列および CLOB 列の場合、integer は、その列について基本表スペースに保管される最大バイト数を指定します。integer は BLOB 列または CLOB 列の場合は 0 から 32680 (両端の値を含む) である必要があります。

DBCLOB 列の場合、integer は、その列について表スペースに保管される 2 バイト文字の最大数を指定します。integer は DBCLOB 列の場合は 0 から 16340 (両端の値を含む) である必要があります。

INLINE LENGTH を指定する場合は、integer の値を LOB 列の最大長より大きくすることはできません。

INLINE LENGTH 文節を指定しなかった場合、LOB 列の最大長は、以下の条件に従って決定されます。

  • 特殊タイプを使用しないか、使用する特殊タイプが INLINE LENGTH 属性なしで作成されている場合、LOB 列では、インストール・パネル DSNTIPD の LOB INLINE LENGTH パラメーターの値をデフォルト・インライン長として使用しますが、これは LOB INLINE LENGTH の値が LOB 列の最大長を超えない場合です。LOB INLINE LENGTH の値が LOB 列の最大長を超える場合は、最大長がこの LOB 列のインライン長になります。
  • INLINE LENGTH 属性を付けて作成された特殊タイプを使用する場合、LOB 列は、その特殊タイプからインライン長を継承します。

長さの決定方法を問わず、LOB のインライン長が最大長より大きくなることはできません。

変更の終わり

ADD COLUMN 文節を指定すると、後続のポイント・イン・タイム・リカバリー要求に影響を及ぼす可能性があることに注意してください。 考えられる制約事項、リカバリー状況への影響、およびその他の考慮事項については、ポイント・イン・タイム・リカバリーを参照してください。

ALTER COLUMN

ALTER COLUMN column-alteration
既存の ID 列の属性など、既存の列の定義を変更します。指定した属性のみが変更され、その他の属性はそのまま変更されません。以後の列の値は、ALTER TABLE ALTER COLUMN ステートメントによる変更の影響を受けます。

ユニーク制約 (主キーまたはユニーク・キー) にユニーク索引が欠落しているために、変更対象の表が不完全な状態になっていてはなりません。ALTER TABLE ALTER COLUMN ステートメントは、データ変更ステートメントと同じ作業単位内で処理されないことがあります。以下のどの条件に当てはまる場合も、列は変更できません。

  • 表に、WITH ROW ATTRIBUTES として定義されている編集プロシージャーまたは検証出口プロシージャーがある。
  • 表がマテリアライズ照会表定義の中で使用されている
  • 表がマテリアライズ照会表である
  • 変更の始まり表が、システム期間データバージョン管理が有効なシステム期間テンポラル表である。変更の終わり
  • 変更の始まり表が履歴表である変更の終わり
  • 変更の始まり表が作成済みの一時表である変更の終わり
  • その列に依存する拡張索引がある
  • 列がフィールド・プロシージャーで参照される
  • 列が参照制約の中で参照される
  • 変更の始まり列が、チェック制約の中で参照される変更の終わり
  • 変更の始まり列が SYSTEM_TIME または BUSINESS_TIME 期間の定義で参照されている変更の終わり
  • 変更の始まり列が transaction-start-ID 列として定義されている。変更の終わり
  • 列がセキュリティー・ラベルとして定義されている
  • 列が行変更タイム・スタンプ列として定義されている

列のデータ・タイプを除き、既存の ID 列の属性はすべて変更できます。ID 列のデータ・タイプを変更するには、その列を含む表をドロップし、再作成してください。 ID 列の属性が変更されるときに、指定した column-name の列が指定した表に存在している必要があり、IDENTITY 属性を指定して定義されている必要があります。

column-name
変更する列を指定します。名前を修飾することはできません。名前は、ALTER ステートメントの処理時に変更対象の表に既に存在する列を識別する必要があります。 この名前には、同じ ALTER TABLE ステートメントで追加される列を指定してはなりません。

列は、1 つの ALTER TABLE ステートメントの 1 つの ALTER COLUMN 文節でのみ参照できます。 ただし、同じ ALTER TABLE ステートメント内で制約を追加またはドロップする場合は、同じ列を複数回参照できます。

SET DATA TYPE (altered-data-type)
変更する列の新しいデータ・タイプを指定します。 文字列の場合は、この文節を使用して、DB2 カタログと OBD に格納されているサブタイプの定義を変更することもできます。
変更の始まりSET DATA TYPE 文節には以下の制限が適用されます。
  • 列が ID 列であるか、ハッシュ・キーの一部である場合、列のデータ・タイプは変更できません。
  • 列の既存のデータ・タイプは、ROWID、日付、時刻、または特殊タイプであってはなりません。
  • 新しいデータ・タイプは、列の既存のデータ・タイプと互換であることが必要です。
  • ソース・データ・タイプが LOB である場合、ターゲット・データ・タイプは同じ LOB データ・タイプでなければなりません。ソース・データ・タイプが LOB であり最大長が変更される場合、新規最大長は既存の長さ属性と同じ大きさ以上である必要があります。
  • この列がパーティショニング状態の列であり、かつ、既存データ・タイプが CHAR または VARCHAR FOR BIT DATA である場合、新規のデータ・タイプは VARBINARY または BINARY にすることはできません。
  • 列が索引の一部であり、DESC 属性で定義されている場合に、列が CHAR FOR BIT DATA、VARCHAR FOR BIT DATA、または BINARY であると、新規データ・タイプは VARBINARY にできません。
  • altered-data-type が XML である場合、変更される列の古いデータ・タイプも XML である必要があります。
  • PAGENUM RELATIVE が指定された表または PAGENUM RELATIVE が指定された表スペース内の行のデータ・サイズは最小 3 バイトでなければなりません。ALTER TABLE ALTER COLUMN の結果として、行サイズが最小サイズ未満になった場合は、有効になりません。
データ・タイプの互換性について詳しくは、代入と比較を参照してください。変更の終わり

変更の始まりTIMESTAMP 列は、より精度の高い TIMESTAMP にのみ変更できます。 TIMESTAMP WITH TIME ZONE 列は、より精度の高い TIMESTAMP WITH TIME ZONE にのみ変更できます。 タイム・スタンプ列の精度が高くなると、指定されたタイム・スタンプ精度と端数秒の桁数が一致するように、既存のデータ値の端数秒がゼロで拡張されます。変更の終わり

変更の始まりいずれかの数値データ・タイプが DECFLOAT に変換される場合、その列にパーティション・キー、索引、またはユニーク制約があると、ALTER ステートメントは失敗します。変更の終わり

データ・タイプが文字またはグラフィック・ストリングの場合、新しい長さ属性は、列の既存の長さ属性と少なくとも同じ大きさであることが必要です。 データ・タイプが数値データ・タイプの場合、指定する精度および位取りは、既存の精度および位取りと少なくとも同じ大きさであることが必要です。10 進数の小数部を浮動小数点に変換する場合、その列にユニーク索引またはユニーク制約があると、ALTER ステートメントは失敗します。

指定した列にデフォルト値がある場合、既存のデフォルト値は、割り当て規則に従って新しいデータ・タイプの列に割り当てることができる値を表している必要があります。 デフォルト値は、新しいデータ・タイプを反映して更新されます。

変更の始まり列が索引で指定されている場合、新しい列の長さは索引サイズの制限を超えてはなりません。PADDED 索引の場合、列の長さ属性の合計が 2000 - n を超えてはいけません (n は NULL 値を格納できる列の数)。NOT PADDED 索引の場合、列の長さ属性の合計が 2000 - n -2m を超えてはいけません (n は NULL 可能列の数、m は可変長列の数)。変更の終わり

変更後の列の合計バイト数は、最大行サイズを超えてはいけません。 列がパーティション・キー内にある場合、新しいパーティション・キーは 255-n を超えてはいけません。

表 1 に、SET DATA TYPE に対してサポートされる数値データ・タイプの変更を示します。
表 1. SET DATA TYPE に対してサポートされる数値データ・タイプの変更
変更前/変更後 SMALLINT INTEGER BIGINT
DECIMAL
(q,t)
REAL DOUBLE
DECFLOAT
(16)
DECFLOAT
(34)
SMALLINT Y Y Y (q-t)>4 Y Y Y Y
INTEGER N Y Y (q-t)>9 N Y Y Y
BIGINT N N Y (q-t)>18 N N N Y
DECIMAL
(p,s)
s=0
p<5
s=0
p<10
s=0
p<=19
q>=p
(q-t)>=(p-s)
p<7 p<16 p<17 Y
DECFLOAT
(16)
N N N N N N Y Y
DECFLOAT
(34)
N N N N N N N Y
FLOAT
(1-21)
N N N N Y Y Y Y
FLOAT
(22-53)
N N N N N Y Y Y
表 2 に、SET DATA TYPE に対してサポートされる文字データ・タイプの変更を示します。
表 2. SET DATA TYPE に対してサポートされる文字データ・タイプの変更 (x > =0)
変更前/変更後 CHARACTER (n+x)
VARCHAR
(n+x)
LONG VARCHAR
GRAPHIC
(n+x)
VARGRAPHIC
(n+x)
LONG VARGRAPHIC
CHARACTER(n) Y Y N N N N
VARCHAR (n) Y Y N N N N
LONG VARCHAR N Y N N N N
GRAPHIC (n) N N N Y Y N
VARGRAPHIC (n) N N N Y Y N
LONG VARGRAPHIC N N N N Y N
CHAR FOR BIT DATA または VARCHAR FOR BIT DATA 列を BINARY または VARBINARY データ・タイプに変換する場合で、かつ、その列に索引がある場合、その索引は RBDP 状態になります。
表 3. SET DATA TYPE に対してサポートされるバイナリー・データ・タイプの変更 (x > =0)
変更前/変更後 BINARY(n+x) VARBINARY(n+x)
CHAR(n) FOR BIT DATA Y Y
VARCHAR(n) FOR BIT DATA Y Y
BINARY(n) Y Y
VARBINARY(n) Y1 Y
注: VARBINARY から BINARY への ALTER は、その列がユニーク索引の一部である場合は許可されません。

変更によって新規の表バージョンが生成された場合、変更される表を含む表スペースは、REORG ペンディング通知通知 (AREO) 状態のままとなります。

FOR subtype DATA
文字列の subtype を変更します。この文節は、データは変更しません。この文節は、DB2 カタログと OBD に格納されているサブタイプの定義のみを更新します。指定する長さとデータ・タイプは、列の既存の長さおよびデータ・タイプと一致している必要があります。

サブタイプが BIT の場合は、文字ストリングのみが有効です。

サブタイプ値 (SBCS、MIXED、および BIT) について詳しくは、built-in-type のサブタイプに関する情報を参照してください。

変更の始まりINLINE LENGTH integer変更の終わり
変更の始まり列の新しいインライン長を指定します。INLINE LENGTH は、ユニバーサル表スペースにある表のインライン LOB 列にのみ指定できます。同じ ALTER TABLE ステートメントに FOR SBCS DATA または FOR MIXED DATA も指定されている場合は、INLINE LENGTH を指定することはできません。インライン LOB 列は、基本行フォーマットを持つ表スペースにある表には追加できません。新規の長さは、元の長さより小さくするか大きくすることができます。integer の値は BLOB 列または CLOB 列の場合は 0 から 32680 バイト(両端の値を含む) であり、DBCLOB 列の場合は 0 から 16340 文字 (両端の値を含む) です。 以下の場合は、インライン長を変更できません。
  • LOB 列が式ベースの索引または空間インデックスで参照されている。
  • 列にデフォルト値が指定されている場合、新規インライン超が、列のデフォルト値の長さより短い。
  • 新規インライン長が、LOB 列の最大長を超える。

基本表スペースが空ではないときに、長さを増やすと、表スペースは REORG ペンディング通知状態になり、長さを減らすと、表スペースは REORG ペンディング状態になります。

インライン長を変更すると、基本表スペースに対して REORG ユーティリティーを実行するまでは、式ベースの索引を作成することはできません。

変更の終わり
変更の始まりSET INLINE LENGTH integer変更の終わり
変更の始まり列の新しいインライン長を指定します。SET INLINE LENGTH は、ユニバーサル表スペースにある表のインライン LOB 列にのみ指定できます。同じ ALTER TABLE ステートメントに FOR SBCS DATA または FOR MIXED DATA も指定されている場合は、INLINE LENGTH を指定することはできません。インライン LOB 列は、基本行フォーマットを持つ表スペースにある表には追加できません。新規の長さは、元の長さより小さくするか大きくすることができます。integer の値は BLOB 列または CLOB 列の場合は 0 から 32680 バイト(両端の値を含む) であり、DBCLOB 列の場合は 0 から 16340 文字 (両端の値を含む) です。 以下の場合は、インライン長を変更できません。
  • LOB 列が式ベースの索引または空間インデックスで参照されている。
  • 列にデフォルト値が指定されている場合、新規インライン超が、列のデフォルト値の長さより短い。
  • 新規インライン長が、LOB 列の最大長を超える。

基本表スペースが空ではないときに、長さを増やすと、表スペースは REORG ペンディング通知状態になり、長さを減らすと、表スペースは REORG ペンディング状態になります。

インライン長を変更すると、基本表スペースに対して REORG ユーティリティーを実行するまでは、式ベースの索引を作成することはできません。

変更の終わり
SET default-clause
変更対象の列の新しいデフォルト値を指定します。新規のデフォルト値は、列にその値を割り当てるための現行規則に適合している必要があります。 既存の行は現行値のまま残ります。新規のデフォルト値は、その変更後に挿入される行の中に反映されるだけです。

変更の始まりこの表をビューで参照しないでください。サブシステム・パラメーター RESTRICT_ALT_COL_FOR_DCC が YES に設定されている場合は、DATA CAPTURE CHANGES 属性を指定して表を定義することはできません。変更の終わり

列がユニーク制約 (ユニーク・キーまたは主キー) またはユニーク索引の中で指定されている場合、このデフォルト値は、その列の既存の行と同じ値に変更される可能性があります。ただし、後続のデータ変更操作は、挿入操作でその列に対して指定された値がないため失敗に終わります。

変更の始まりLOB 列の場合、インライン LOB のデフォルト値のみを変更できます。新規デフォルト値の長さは、インライン超を超えることはできません。変更の終わり

変更の始まりADD COLUMN 文節を指定した ALTER TABLE ステートメントでデフォルト値を指定して正常に実行された場合、 それ以降、その ALTER TABLE ステートメントの処理より前の時点へのポイント・イン・タイム・リカバリーを要求することはできません。変更の終わり

DROP DEFAULT
その列の現行のデフォルト値をドロップします。NULL 可能でない列の場合、指定された列は、デフォルト値を指定して定義する必要があります。NULL 可能である列の場合、指定された列には、NULL デフォルト値を使用できません。NULL 可能である列の場合、新規のデフォルト値は NULL 値になります。

指定された列を含む表をビューで参照しないでください。 サブシステム・パラメーター RESTRICT_ALT_COL_FOR_DCC が YES に設定されている場合は、DATA CAPTURE CHANGES 属性を指定して表を定義することはできません。

以下のステップに従って、ADD COLUMN 文節を指定した ALTER TABLE を使用して定義された列のデフォルト値を除去します。

  1. 変更の始まり次のように、REORG ユーティリティーまたは UPDATE ステートメントを実行して、AREO* 状態をリセットします。
    • 当該表を含む表スペースで REORG ユーティリティーを実行します。
    • 表がユニバーサル表スペース内にあり、表で行アクセス制御がアクティブになっていない場合は、SKIP LOCKED DATA 文節や WHERE 文節を指定せずに UPDATE ステートメントを実行します。更新操作は検索条件付き UPDATE ステートメントを使用して行う必要があり、SET 文節内の式を scalar-fullselectrow-fullselect にすることはできません。SELECT ステートメント内の更新操作では AREO* 状態はリセットされません。
    変更の終わり
  2. DROP DEFAULT 文節を指定する ALTER TABLE ステートメントを発行します。

変更の始まりALTER TABLE の前に REORG が行われないか、UPDATE ステートメントで AREO* 状態がリセットされない場合、ALTER TABLE ステートメントに対してエラーが返されます。変更の終わり

変更の始まりALTER COLUMN 文節を指定した ALTER TABLE ステートメントで DROP DEFAULT を指定して正常に実行された場合、それ以降、その ALTER TABLE ステートメントの処理より前の時点へのポイント・イン・タイム・リカバリーを要求することはできません。変更の終わり

変更の始まりSET GENERATED変更の終わり
変更の始まり変更の始まりDB2 が列の値を生成することを示します。履歴表の列または既に GENERATED 属性を持つ列には、SET GENERATED を指定してはなりません。
ALWAYS
行を挿入または更新し、かつデフォルト値を生成する必要がある場合、DB2 で常に列の値を生成することを指定します。
BY DEFAULT
行を挿入または更新し、かつデフォルト値を生成する必要がある場合、明示的な値が指定されていない限り、DB2 で列の値を生成することを指定します。行変更タイム・スタンプ列の場合は、DB2 は指定された値を挿入または更新しますが、行変更タイム・スタンプ列に、行変更タイム・スタンプ列を単独で指定する固有の制約または固有の索引がない限り、その値がその列の固有な値であることを検証しません。
変更の終わり変更の終わり
RESTART
ID 列に対して後続の値を指定します。numeric-constant が無指定の場合は、ID 列を当初作成した時点の開始値として暗黙的または明示的に指定された値から、シーケンスを再開始します。
WITH numeric-constant
この ID 列に対して後続の値を生成する時点である場合、numeric-constant をこの列の後続の値として使用することを指定します。この値は、この列に割り当て可能な正または負の数 (0 を含む) で、小数点の右側にゼロ以外の数字がないように指定します。変更の始まりnumeric-constant 値は、MAXVALUE および MINVALUE による制約を受けません。 つまり、RESTART WITH 文節を使用して、循環に使用される範囲外の値の生成を開始することができます。 ただし、指定された RESTART WITH 値の後、次に生成される値は、昇順の ID 列の場合は MINVALUE、降順の ID 列の場合は MAXVALUE になります。変更の終わり

RESTART を指定しない場合、シーケンスは再始動しません。代わりに、ALTER ステートメントの発行後、すべてのオプションに対して有効な現行値を使用して再開します。

ID 列を再始動後、または ID 列を循環可能へ変更後に、シーケンス番号が以前に生成した値と重複する可能性があります。

SET INCREMENT BY numeric-constant
ID 列の定義については、ID 列を定義するための INCREMENT BY numeric-constant の説明を参照してください。
SET MINVALUE または NO MINVALUE
定義については、ID 列を定義するための 「MINVALUE または NO MINVALUE」に関する説明を参照してください。
SET MAXVALUE または NO MAXVALUE
定義については、ID 列を定義するための MAXVALUE または NO MAXVALUE に関する説明を参照してください。
SET CYCLE または NO CYCLE
定義については、ID 列を定義するための CYCLE または NO CYCLE に関する説明を参照してください。
SET CACHE または NO CACHE
定義については、ID 列を定義するための CACHE または NO CACHE に関する説明を参照してください。
SET ORDER または NO ORDER
定義については、ID 列を定義するための ORDER または NO ORDER に関する説明を参照してください。

ALTER COLUMN 文節を指定すると、後続のポイント・イン・タイム・リカバリー要求に影響を及ぼす可能性があることに注意してください。 考えられる制約事項、リカバリー状況への影響、およびその他の考慮事項については、ポイント・イン・タイム・リカバリーを参照してください。

RENAME COLUMN:

RENAME COLUMN source-column-name TO target-column-name
指定された列の名前を変更します。この名前は修飾してはなりません。
source-column-name
名前を変更する対象の列を指定します。この名前は表の既存の列を示すものでなければなりません。
target-column-name
変更の始まり列の新規名を指定します。この名前は、表内に既に存在する列、または表内に存在する期間の名前を示すものであってはなりません。変更の終わり

以下のいずれかの条件に当てはまる場合、列の名前変更はできません。

  • 列がビューで参照される
  • 列が索引定義の式の中で参照されている
  • 変更の始まり列が行の許可または列マスクの定義で参照される変更の終わり
  • 変更の始まり列が SQL 表のユーザー定義関数で参照される変更の終わり
  • 列にはチェック制約が定義されている
  • 列にはフィールド・プロシージャーが定義されている
  • 表にはトリガーがある
  • 表がマテリアライズ照会表であるか、またはマテリアライズ照会表により参照される
  • 表に有効なプロシージャー、または WITH ROW ATTRIBUTES として定義されている編集プロシージャーがある。
  • 表が DB2 カタログ表である
  • 変更の始まり表が、システム期間テンポラル表、または履歴表である変更の終わり

ADD PERIOD:

変更の始まり ADD PERIOD period-definition 変更の終わり
変更の始まり表に期間を追加します。

begin-column-name は、end-column-name と同じであってはなりません。begin-column-name のデータ・タイプ、精度、および位取りは、end-column-name と同じでなければなりません。

SYSTEM_TIME(begin-column-name,end-column-name)
変更の始まり期間 SYSTEM_TIME の名前。この名前は表の既存の列を示すものであってはなりません。表には 1 つの SYSTEM_TIME 期間のみ含めることができます。

変更の始まりbegin-column-name には row-begin 列を指定する必要があり、end-column-name には row-end 列を指定する必要があります。この列は両方とも、GENERATED ALWAYS として定義されている必要があります。列マスクや行の許可を表に対して定義してはなりません。変更の終わり

変更の終わり
BUSINESS_TIME(begin-column-name,end-column-name)
期間 BUSINESS_TIME の名前。この名前は表の既存の列を示すものであってはなりません。表には 1 つの BUSINESS_TIME 期間のみを含めることができます。

end-column-name の値が begin-column-name の値より大きくなるように、暗黙的なチェック制約が生成されます。 暗黙的に作成されるチェック制約の名前は DB2_GENERATED_CHECK_CONSTRAINT_FOR_BUSINESS_TIME です。この名前を既存のチェック制約の名前として定義してはなりません。

begin-column-nameend-column-name に指定されている列は、DATE または TIMESTAMP(6) WITHOUT TIME ZONE として定義されている必要があり、さらに NOT NULL として定義されている必要があります。begin-column-nameend-column-name に指定されている列は、GENERATED 文節で定義された列を示すものであってはなりません。

変更の始まりこの文節またはキーワードを使用すると、ターゲット・オブジェクトに依存するパッケージや、カスケード効果により、その関連オブジェクトに依存するパッケージが無効になることがあります。パッケージを無効化する変更を参照してください。変更の終わり

begin-column-name
期間の開始値を記録する列を指定します。 この名前は表の既存の列を示している必要があります。begin-column-name は、表の別の期間の定義で使用されている列と同じであってはなりません。
end-column-name
期間の終了値を記録する列を指定します。 この名前は表の既存の列を示している必要があります。end-column-name は、表の別の期間の定義で使用されている列と同じであってはなりません。
変更の終わり

ADD unique-constraint:

CONSTRAINT constraint-name
主キー制約またはユニーク・キー制約の名前を指定します。 制約名を指定しないと、ユニーク制約名が生成されます。名前を指定する場合、その名前は以前に表に指定した参照制約、チェック制約、主キー制約、またはユニーク・キー制約のいずれの名前とも異なるものでなければなりません。この表スペースが暗黙的に作成される場合、適用する主キーとユニーク・キーの索引も暗黙的に作成されます。
PRIMARY KEY(column-name,...)
指定した列から構成される主キーを定義します。各列名は、表の列を識別する非修飾 名でなければなりません。同じ列を複数回指定してはいけません。 PRIMARY KEY 文節では、以下のタイプの列は指定できません。
  • LOB 列
  • ROWID 列
  • DECFLOAT 列
  • XML 列
  • LOB、ROWID、または DECFLOAT データ・タイプに基づく特殊タイプ列
  • 行変更タイム・スタンプ列

指定する列の数は 64 を超えてはいけません。また、列の長さ属性の合計が 2000 -2m を超えてはいけません (ここで、m はキーの可変長列の数)。表は主キーを持っていてはなりません。識別する列は、NOT NULL と して定義しておく必要があります。

主キー内の列セットは、別のユニーク・キーの列セットと同じにすることはできません。

この表には、主キーと同じユニーク・キーを持ったユニーク索引がなければなりません。これら 2 つのキーは、同数の列を持ち、一方のキーの n 列目の名前がもう一方のキーの n 列目の名前と 同じ場合にのみ、同一のキーとなります。 暗黙的に作成された表スペースの中にこの表がある場合で、かつ、指定された列にはユニーク索引が定義されていない場合、DB2 は 1 次索引を自動的に作成します。特権セットには、表に関する INDEX 特権、およびバッファー・プールおよびストレージ・グループに関する USE 特権が含まれていなければなりません。暗黙的に作成された主キーは基本表の所有者が所有します。

指定した列が、表の主キーとして定義されます。索引の記述は、それが 1 次索引であることを示すように変更されます。主キーと同一のキーを持つユニーク索引が表に複数ある場合、 そのどれが 1 次索引として選択されるのかは決まっていません。

変更の始まり
BUSINESS_TIME WITHOUT OVERLAPS
BUSINESS_TIME WITHOUT OVERLAPS は、リスト内の最後の項目として指定できます。BUSINESS_TIME WITHOUT OVERLAPS を指定する場合は、リストに少なくとも 1 つの column-name または key-expression が含まれている必要があります。 WITHOUT OVERLAPS が指定されている場合、これ以降に指定されているキーの値は、BUSINESS_TIME 期間にわたって固有です。BUSINESS_TIME WITHOUT OVERLAPS が指定されている場合、BUSINESS_TIME 期間の列を制約の一部として指定してはなりません。 BUSINESS_TIME WITHOUT OVERLAPS を指定すると、制約に以下の列が追加されます。
  • 昇順での BUSINESS_TIME 期間の終了列
  • 昇順での BUSINESS_TIME 期間の開始列
変更の終わり
UNIQUE(column-name,…)
指定した constraint-name を持つ、 識別された列から構成されるユニーク・キーを定義します。constraint-name を指定しないと、名前が生成されます。 各列名は、表の列を識別する非修飾 名でなければなりません。同じ列を複数回指定してはいけません。 UNIQUE 文節では、以下のタイプの列は指定できません。
  • LOB 列
  • ROWID 列
  • DECFLOAT 列
  • XML 列
  • LOB、ROWID、または DECFLOAT データ・タイプに基づく特殊タイプ列

指定される各列は、NOT NULL と定義する必要があります。指定する列の数は 64 を超えてはいけません。また、列の長さ属性の合計が、埋め込みありの索引の場合は 2000 - n、埋め込みなしの索引の場合は 2000 - n - 2m を超えてはいけません (ここで、n は NULL 値を格納できる列の数、m はキーの可変長列の数)。

ユニーク・キー内の列セットは、主キーまたは別のユニーク・キーの列セットと 同じにすることはできません。 ユニーク・キーは、主キーまたは既に定義済みのユニーク・キーと同じ 場合に、重複キーとなります。重複するユニーク・キーを指定すると、警告が出て無視されます。

表には、ユニーク・キーと同じキーを持つユニーク索引がなければなりません。 これら 2 つのキーは、同数の列を持ち、一方のキーの n 列目の名前がもう一方のキーの n 列目の名前と 同じ場合にのみ、同一のキーとなります。 暗黙的に作成された表スペースの中にこの表がある場合で、かつ、指定された列にはユニーク索引が定義されていない場合、DB2 はユニーク索引を自動的に作成して、ユニーク・キー制約を適用します。特権セットには、表に関する INDEX 特権、およびバッファー・プールおよびストレージ・グループに関する USE 特権が含まれていなければなりません。暗黙的に作成されたユニーク・キーは基本表の所有者が所有します。

識別した列が、表のユニーク・キーとして定義されます。 索引の記述は、それがユニーク・キー制約を実施することを示すように変更されます。 ユニーク・キーと同一のキーを持つユニーク索引が表に複数ある場合、 実施索引の選択は任意に行われます。

変更の始まり
BUSINESS_TIME WITHOUT OVERLAPS
BUSINESS_TIME WITHOUT OVERLAPS は、リスト内の最後の項目として指定できます。BUSINESS_TIME WITHOUT OVERLAPS を指定する場合は、リストに少なくとも 1 つの column-name または key-expression が含まれている必要があります。 WITHOUT OVERLAPS が指定されている場合、これ以降に指定されているキーの値は、BUSINESS_TIME 期間にわたって固有です。BUSINESS_TIME WITHOUT OVERLAPS が指定されている場合、BUSINESS_TIME 期間の列を制約の一部として指定してはなりません。 BUSINESS_TIME WITHOUT OVERLAPS を指定すると、制約に以下の列が追加されます。
  • 昇順での BUSINESS_TIME 期間の終了列
  • 昇順での BUSINESS_TIME 期間の開始列
変更の終わり

ADD referential-constraint:

CONSTRAINT constraint-name
参照制約の名前を指定します。制約名を指定しないと、ユニーク制約名が生成されます。名前を指定する場合、その名前は以前に表に指定した参照制約、チェック制約、主キー制約、またはユニーク・キー制約のいずれの名前とも異なるものでなければなりません。
FOREIGN KEY (column-name,...) references-clause
指定した constraint-name を持つ参照制約を指定します。

変更の始まり表が履歴表である場合は、FOREIGN KEY を指定できません。変更の終わり

T1 が ALTER TABLE ステートメントのオブジェクト表を表すものとします。 T1 は、参照制約の子表です。

参照制約の外部キーは、指定された列この column-name は、T1 の列を識別する非修飾 名でなければなりません。同じ列を複数回指定してはいけません。 FOREIGN KEY 文節では、以下のタイプの列は指定できません。
  • LOB 列
  • ROWID 列
  • DECFLOAT 列
  • XML 列
  • LOB、ROWID、または DECFLOAT データ・タイプに基づく特殊タイプ列
  • セキュリティー・ラベル列
  • 行変更タイム・スタンプ列
指定する列の数は 64 を超えてはなりません。また、その長さ属性の合計が、255 から NULL 値にすることのできる列の数を引いた値を超えてはなりません。FOREIGN KEY および親表が、T1 に関する既存の参照制約の FOREIGN KEY および親表と同じである場合、参照制約は重複します。重複する参照制約を指定すると、警告が出て無視されます。

変更の始まり参照制約の外部キーは、BUSINESS_TIME WITHOUT OVERLAPS を含む親キーを参照できません。変更の終わり

REFERENCES table-name (column-name,...)
REFERENCES の後に指定される表名は、参照制約の親表です。table-name 値は、現行サーバーに存在する表を示していなければなりません。変更の始まり この表は、制約関係における親表と呼ばれます。変更の終わり

table-name は、以下を示す名前であってはなりません。

  • カタログ表
  • 変更の始まりディレクトリー表変更の終わり
  • 宣言済みグローバル一時表
  • 変更の始まり 履歴表変更の終わり

T2 は親表を示し、T1 は変更対象の表を示すものとします。(T1 と T2 は同じ表にすることができます。)

T2 はユニーク索引を持っている必要があります。T2 の特権セットには親表の ALTER 特権または REFERENCES 特権が含まれているか、候補の親キーの列についての REFERENCES 特権が含まれていなければなりません。PERIOD BUSINESS_TIME 文節が指定されている場合、これには BUSINESS_TIME 期間の列が含まれます。

参照制約の親キーは、指定された列と BUSINESS_TIME 期間の列 (PERIOD BUSINESS_TIME が指定される場合) から構成されます。 この column-name は、T2 の列を識別する非修飾 名でなければなりません。同じ列を複数回指定してはいけません。 PERIOD BUSINESS_TIME が指定されている場合、BUSINESS_TIME 期間の列を制約の一部として指定してはなりません。REFERENCES 文節では、以下のタイプの列は指定できません。

  • LOB 列
  • ROWID 列
  • DECFLOAT 列
  • XML 列
  • LOB、ROWID、または DECFLOAT データ・タイプに基づく特殊タイプ列
  • セキュリティー・ラベル列
  • 行変更タイム・スタンプ列

親キー内の列名のリストは、親表 T2 内の主キーまたはユニーク・キー内の列名のリストと同じでなければなりません。列名は主キーまたはユニーク・キー内と同じ順序で指定し なければなりません。 T2 内のどの参照列に非数値のデータ・タイプがあっても、T2 と T1 は同一コード化スキームを使用する必要があります。

列名のリストが指定されていない場合、T2 には主キーが必要になります。列名のリストを省略する場合は、T2 の主キーの列の暗黙的指定になります。

指定した外部キーは T2 の親キーと同じ列数でなければなりません。また、その名前、デフォルト値、NULL 属性およびチェック制約以外の外部キーの n 列の記述は、候補の親キーの n 列の記述と同じでなければなりません。 外部キーに特殊タイプとして定義されている列が含まれている場合、候補の親キーの対応する列は同じ特殊タイプでなければなりません。外部キーの列にフィールド・プロシージャーがある場合、候補の親キーの対応する列には同じフィールド・プロシージャーおよび同一のフィールド記述がなければなりません。フィールド記述 は、関連するフィールド・プロシージャー を持つものとして定義された列について、データベースに格納されるときの エンコードされた値を記述したものです。

T1 を含む表スペースが、DB2 で使用可能でなければなりません。T1 にデータが追加されると、表スペースはチェック・ペンディング状況になります。 表が空でない場合は、セグメント化表スペース内の表にデータが取り込まれています。セグメント化されていない表スペース内の表は、表スペースに レコードが以前に含まれていた場合は、データが入っているものと見なされます。

FOREIGN KEY 文節で指定した参照制約は、T2 が親で T1 が 従属となる関係を定義します。 参照制約の記述は、カタログに記録されます。

ON DELETE
関係の削除規則は、ON DELETE 文節によって決まります。ここで使われる概念の詳細については、参照制約を参照してください。

T1 と T2 が同じ表の場合には、CASCADE または NO ACTION を指定しなければなりません。 外部キーのいずれかの列を NULL 値にすることができる場合を 除いて、SET NULL を指定してはなりません。また、外部キーの NULL 可能列がパーティション索引のキー列である場合も、SET NULL を指定してはなりません。規則のデフォルト値は、ALTER TABLE ステートメントが処理されるときの CURRENT RULES 特殊レジスターの値によって決まります。レジスターの値が「DB2」の場合は、削除規則のデフォルトは RESTRICT です。値が「SQL」の場合は、削除規則のデフォルト値は NO ACTION です。

削除規則は、T2 の行が DELETE または伝搬された削除操作のオブジェクトであ り、その行が T1 に従属行を持っている場合に適用されます。p が、T2 のそのような行を表すものとします。

  • RESTRICT または NO ACTION を指定すると、 エラーが発生し、行は削除されません。
  • CASCADE を指定した場合、削除操作は T1 にある p の 従属行に伝搬します。
  • SET NULL を指定した場合は、T1 にある p の 各従属行の外部キーの NULL 可能な列が、すべて NULL に設定されます。

複数の表が関係するサイクルでは、表をそれ自身に連結削除させてはなりません。したがって、サイクルの形になる関係の場合は、次のようになります。

  • サイクルの一部となる既存の関係が、それぞれ CASCADE と いう削除規則を持つ場合には、参照制約を定義できません。
  • T2 が T1 に連結削除される場合には、CASCADE を指定してはなりません。

T1 が複数の経路を通じて T2 に連結削除される場合、T1 が 従属表となり、かつこれらの経路のすべてまたはその一部を形成 する関係は、同じ削除規則を持っていなければなりません。 また、この規則を SET NULL にすることはできません。例えば、削除規則 r を持つ関係において T1 が T3 の 従属表となっており、以下のいずれかに該当するものとします。

  • T2 と T3 が同じ表である。
  • T2 が T3 の下層表であり、T3 から行を削除するとそれが T2 にカスケードする。
  • T2 と T3 がともに同じ表の下層表であり、その表から行を 削除するとそれが T2 と T3 の両方にカスケードする。

この場合は r が SET NULL であると、 参照制約は定義できません。r が SET NULL 以外であれば参照制約の定義はできますが、 FOREIGN KEY 文節で暗黙的または明示的に指定する削除規則は 、r と 同じでなければなりません。

ENFORCED または NOT ENFORCED
挿入、更新、削除などの通常操作中に 、DB2 によって参照制約を適用するかどうか指定します。
ENFORCED
通常操作 (データ変更操作など) 中に、DB2 によって参照制約を適用し、操作の正しさを保証するように指定します。ENFORCED がデフォルトです。
NOT ENFORCED
通常操作 (データ変更操作など) 中に、DB2 によって参照制約を適用しないことを指定します。NOT ENFORCED を使用するのは、表に格納されるデータが制約に準拠していることが、DB2 に依存しない一部の他方式により、検査済みの場合にのみ限定すべきです。
ENABLE QUERY OPTIMIZATION
照会を最適化するためにこの制約を使用できることを指定します。DB2 は、この制約が正しいことを前提として、マテリアライズ照会表を使用して照会を最適化する際にこの情報を使用します。これはデフォルトです。

ADD check-constraint:

CONSTRAINT constraint-name
チェック制約の名前を指定します。constraint-name を指定しない場合、チェック制約の定義で指 定した check-condition の最初の列名から、ユニーク制約名が導き出されます。名前を指定する場合、その名前は以前に表に指定した参照制約、チェック制約、主キー制約、またはユニーク・キー制約のいずれの名前とも異なるものでなければなりません。
CHECK (check-condition)
チェック制約を定義します。表のそれぞれの行に対して、check-condition がいつでも真または不明であることが必要です。check-condition は、述部のオペランドである列が NULL の場合に、不明と評価されることがあります。不明と評価される check-condition は、チェック制約に違反してはいません。check-condition は検索条件であり、以下の制約事項があります。
  • 参照できるのは、表 table-name の列だけです。
  • 列は、次のタイプの列であってはなりません。
    • LOB 列
    • ROWID 列
    • DECFLOAT 列
    • XML 列
    • LOB、ROWID、および DECFLOAT データ・タイプに基づく特殊タイプ列
    • セキュリティー・ラベル列
  • 重複ブランクを含めずに、7400 バイトまでの長さです。
  • 以下のいずれも含めてはなりません。
    • 副選択
    • 組み込み関数またはユーザー定義関数
    • CAST 指定
    • 特殊タイプの作成時に作成されたものを除く cast 関数
    • ホスト変数
    • パラメーター・マーカー
    • 特殊レジスター
    • フィールド・プロシージャーを含む列
    • CASE 式
    • ROW CHANGE 式
    • 行式
    • DISTINCT 述部
    • GX 定数 (16 進グラフィック・ストリング定数)
    • シーケンス参照
    • OLAP 指定
  • check-condition が LOB 列 (LOB に基づく特殊タイプを含む) を参照する場合、参照は LIKE 述部内で行う必要があります。
  • 述部間で、AND および OR 論理演算子を使用できます。NOT 論理演算子は使用できません。
  • 各述部の第 1 オペランドは、表中の列の列名でなければ なりません。
  • check-condition の第 2 オペランドは、定数かまたは 表中の列の列名のいずれかでなければなりません。
    • 述部の第 2 オペランドが定数である場合、次のことが言えます。
      • 定数が浮動小数点数である場合、列データ・タイプは浮動小数点でなければなりません。
      • 定数が 10 進数である場合、列データ・タイプは浮動小数点か または 10 進数のいずれかになります。
      • 定数が長精度整数である場合、列データ・タイプは整数または短精度整数にしないでください。
      • 定数が整数である場合、列データ・タイプは短精度整数にはなりません。
      • 定数が短精度整数である場合、列データ・タイプは短精度整数になります。
      • 定数が 10 進定数である場合、その精度は列の精度よりは大きくなりません。
    • 述部の第 2 オペランドが列である場合、述部の両方の列は、 以下のようでなければなりません。
      • データ・タイプが同じ。
      • 記述が同じ。ただし、列の NOT NULL と DEFAULT 文節の指定は 異なっていてもかまいません。また、 同じデータ・タイプのストリング列に別の長さ属性があってもかまいません。

データが読み込まれる表におけるチェック制約定義の影響: データが読み込まれる表でチェック制約が定義され、特殊レジスター CURRENT RULES の値が「DB2」である場合、チェック制約はすぐに表に反映されるわけではありません。チェック制約が表の記述に追加され、表を含む表スペースが チェック・ペンディング状況になります。チェック・ペンディング状況の説明と、ユーティリティーの操作に関する考慮事項については、 「CHECK ペンディング状況」を参照してください。

データを読み込まれる表でチェック制約が定義され、特殊レジスター CURRENT RULES の値が「STD」である場合、チェック制約は表のすべての行に対して検査されます。 違反がなければ、チェック制約が表に追加されます。新しいチェック制約に違反する行がある場合、 エラーが発生して表の記述は未変更となります。

DROP constraint:

DROP PRIMARY KEY
主キーの定義と、その主キーが親キーになっている すべての参照制約をドロップします。表は主キーを持っていなければなりません。 また、特権セットに、その表の各従属表に対する ALTER または REFERENCES 特権が含まれていなければなりません。

1 次索引の記述は、それが 1 次索引でないことを示すように変更されます。 表スペースを暗黙的に作成済みの場合、対応する適用索引は、主キーがドロップされると、ドロップされます。

DROP UNIQUE constraint-name
ユニーク・キー制約の定義と、そのユニーク・キーが親キーになっている場合の すべての参照制約をドロップします。 表にはユニーク・キーがなければなりません。 特権セットには、その表の各従属表に対する ALTER または REFERENCES 特権が 含まれていなければなりません。 実施索引の記述は、それがユニーク・キー制約を適用しないことを示すように変更されます。表スペースを暗黙的に作成すると、対応する適用索引は、ユニーク・キーがドロップされるとドロップされます。
DROP FOREIGN KEY constraint-name
参照制約 constraint-name をドロップします。constraint-name は、 表が従属表になっている場合の参照制約を識別する必要があり、特権セットには、 その関連の親表の ALTER 特権または REFERENCES 特権が含まれているか、 またはその関連の親表の列の REFERENCES 特権が含まれていなければなりません。
DROP CHECK constraint-name
チェック制約 constraint-name をドロップします。constraint-name には、表で定義された既存のチェック制約を指定する必要があります。
DROP CONSTRAINT constraint-name
制約 constraint-name をドロップします。constraint-name は、 表に定義された既存の主キー制約、ユニーク・キー制約、チェック制約、または 参照制約を識別しなければなりません。

DROP CONSTRAINT は 、DROP PRIMARY KEY、DROP UNIQUE KEY、 DROP FOREIGN KEY、 または DROP CHECK と同じ ALTER TABLE ステートメントで使用してはなりません。

ADD partitioning:

ADD PARTITION BY RANGE
表の範囲のパーティション・スキームを指定します (データをパーティション化するために使用される列)。この文節を指定すると、表は表制御パーティションを使用します。ADD PARTITION BY RANGE 文節に指定するパーティションの数は、表スペースに定義されているパーティション数と同じにする必要があります。

この文節は、パーティション表スペース内の表のみに適用されます。 表制御パーティションまたは索引制御パーティションのどちらかを設定して、表が既に完成している場合は、ADD PARTITION BY RANGE 文節は使用できません。この文節を使用すると、この表に対する後続の CREATE INDEX ステートメントに ENDING AT 文節を使用できなくなります。

partition-expression
データのターゲット・データ・パーティションを決定するために範囲を定義する対象のキー・データを指定します。
column-name
キーの列を指定します。各 column-name には、この表の列を指定する必要があります。65 列以上の列を指定しないでください。また、同一列を複数回指定しないでください。修飾した列名や、以下のタイプの列も指定しないでください。
  • BINARY 列または VARBINARY 列
  • LOB 列
  • DECFLOAT 列
  • XML 列
  • 前述のいずれかのデータ・タイプに基づく特殊タイプの列
  • 行変更タイム・スタンプ列

列の長さ属性の合計は、255 - n を超えてはなりません (ここで、n は NULL 値を格納できる列の数)。

変更の始まりタイム・ゾーン付きタイム・スタンプ列 (またはタイム・ゾーン付きタイム・スタンプ・データ・タイプに基づく特殊タイプの列) は、パーティション・キーの最後の列としてのみ指定できます。変更の終わり

NULLS LAST
比較のために、NULL 値を正の無限大として扱うように指定します。
ASC
項目を列の昇順で並べます。ASC がデフォルトです。
DESC
項目を列の降順で並べます。
partition-element
範囲内にある表の行を格納するデータ・パーティション・キーと表スペースの範囲を指定します。
PARTITION integer
表スペース内の物理的なパーティション数 を指定します。PARTITION 文節は、表スペースのすべてのパーティションに対して指定する必要があります。以下の文章での最高と は、列のソート・シーケンスの中で最高であることを意味します。昇順 (ASC) と して定義された列においては、最高と最低がその言葉通りの意味を持ちます。降順 (DESC) として定義された列においては、実際には 最低の値がソート・シーケンスでは最高値になります。
ENDING AT (constant、 MAXVALUE、または MINVALUE...)
パーティション境界の限界キーを指定します。各 PARTITION 文節の ENDING AT の後には、少なく とも 1 つの値 (定数、MAXVALUE、または MINVALUE) を指定します。 キーの中の列と同じ数だけ値を使うことができます。すべての値を連結したものが、昇順の場合はキーの最高値、降順の場合は最低値になります。
constant
定数値は、その値を列に割り当てるときの規則に適合したデータ・タイプで指定します。ストリング定数がその列の長さ属性に必要な長さより長いか短い場合、 定数は必要な長さになるまで、右端から切り捨てられるか右側に埋め込みが 行われます。列が昇順の場合、埋め込み文字は X'FF' です。列が降順の場合、埋め込み文字は X'00' です。10 進定数の精度と位取りは、それに対応する列の精度と 位取りより大きくてはなりません。16 進数ストリング定数 (GX) は指定できません。
MAXVALUE
パーティション境界の限界キーに対してその最大値よりも大きい値を指定し ます (すなわち、その列が昇順または降順かどうかに関係なくすべてが X'FF')。パーティション・キー内のすべての列が昇順の場合、MAXVALUE の 後ろで定数や MINVALUE 文節を指定できません。MAXVALUE が指定されると、後続の列はすべて MAXVALUE を指定しなければなりません。
MINVALUE
パーティション境界の限界キーに対してその最小値よりも小さい値を指定し ます (すなわち、その列が昇順または降順かどうかに関係なくすべてが X'00')。パーティション・キー内のすべての列が降順の場合、MINVALUE の後に定数または MAXVALUE 文節は指定できません。 MINVALUE が指定された後の後続の列はすべて MINVALUE である必要があります。
キー値には、パーティション定義用の ENDING AT 文節に関する規則のリストが適用されます。規則のリストを参照してください。
INCLUSIVE
範囲の指定に使用した値をデータ・パーティションに含めるように指定します。
変更の始まりHASH SPACE integerK|M|G変更の終わり
変更の始まりパーティション・エレメントと関連付けられたパーティションに事前割り振りする固定ハッシュ・スペースの量を指定します。パーティション・エレメントで HASH SPACE を省略した場合は、ORGANIZE BY CLAUSE に指定されている HASH SPACE 値が使用されます。

partition-element の HASH SPACE キーワードは、ハッシュ編成を使用するように表が定義されている場合のみ指定する必要があります。

変更の始まり
K
変更の始まりハッシュ・スペース・サイズをバイト単位で指定するために、整数値に 1024 を掛けることを指定します。この整数は 256 から 268435456 までの間でなければなりません。変更の終わり
M
ハッシュ・スペース・サイズをバイト単位で指定するために、整数値に 1048576 を掛けることを指定します。この整数は 1 から 262144 までの間でなければなりません。
G
ハッシュ・スペース・サイズをバイト単位で指定するために、整数値に 1073741824 を掛けることを指定します。この整数は、範囲パーティション表の場合は 1 から 256 まで、非パーティション化表の場合は、1 から 131072 までである必要があります。
変更の終わり 4G を超える値が指定された場合、表スペースのデータ・セットが拡張形式および拡張アドレッシング機能 で指定された DFSMS データ・クラスと関連している。変更の終わり

ADD PARTITION:

ADD PARTITION

表、およびその表のそれぞれのパーティション化索引にパーティションを追加するように指定します。 新規パーティションは次の物理パーティションで、表スペースが最大に達するまでは使用されません。ADD PARTITION は、非パーティション表に対して指定してはなりません。表がマテリアライズ照会表である場合、またはマテリアライズ照会表が表に対して定義されている場合は、パーティションを追加できません。ただし、アクセラレーテッド照会表が表に定義されている場合は、パーティションを追加できます。パーティション・キーまたはパーティション索引が欠落しているために表スペース定義が不完全な場合は、パーティションを追加できません。表が索引制御パーティションを使用している場合は、表制御パーティションを使用するように変換されます。

変更の始まり表が増加対応パーティション表スペースにある場合は、パーティションの数が MAXPARTITIONS 制限に達するまで、新規パーティションを追加できます。表スペース・パーティションの総数が、表スペースの MAXPARTITIONS に指定されている値を超えることはできません。変更の終わり

許されるパーティションの最大数は、元の表スペースを作成した方法によって異なります。 表スペースの作成時に DSSIZE を指定した場合、この値はゼロ以外で、カタログに入っています。 許可されるパーティションの最大数を次の表に示します。

表 4. 許されるパーティションの最大数
DSSIZE ページ・サイズ 4 KB ページ・サイズ 8 KB ページ・サイズ 16 KB ページ・サイズ 32 KB
1GB から 4GB 4096 4096 4096 4096
8GB 2048 4096 4096 4096
16GB 1024 2048 4096 4096
32GB 512 1024 2048 4096
64GB 256 512 1024 2048
変更の始まり128GB変更の終わり 変更の始まり128変更の終わり 変更の始まり256変更の終わり 変更の始まり512変更の終わり 変更の始まり1024変更の終わり
変更の始まり256GB変更の終わり 変更の始まり64変更の終わり 変更の始まり128変更の終わり 変更の始まり256変更の終わり 変更の始まり512変更の終わり
表スペースの作成時に LARGE を指定した場合、パーティションの最大数は表 5 の 4 行目に示した数です。LARGE または DSSIZE を指定しないときにパーティション数が 254 を超える場合、パーティションの最大数は表スペースのページ・サイズによって決まります。
表 5. DSSIZE = 0 の場合のパーティションの最大数
表スペースのタイプ 既存パーティション数 最大パーティション数
非 LARGE 1 から 16 16
非 LARGE 17 から 32 32
非 LARGE 33 から 64 64
長精度 該当せず 4096

新規パーティションの属性は継承または計算されます。大半の属性は最後の論理パーティションから継承されますが、一部の属性が表スペースから継承されることがあります。新規パーティションの特定の属性を変更する必要がある場合は、パーティションを追加した後に、ALTER TABLESPACE ステートメントと ALTER INDEX ステートメントを別々に発行する必要があります。

変更の始まりHASH SPACE は、ADD PARTITION と組み合わせて指定できません。増加対応パーティション表スペースでは、パーティション・レベルでハッシュ・スペース値を適用できません。変更の終わり

ENDING AT (constant、MAXVALUE、または MINVALUE、...)
新規パーティションの高いキー限界を指定します。
新規パーティションの高いキー限界値は、最後の論理パーティションの限界キー値を超えている必要があります。つまり、昇順のパーティション化よりも高く、降順のパーティション化よりも低くなければなりません。PARTITION 文節の ENDING AT の後には、値を少なくとも 1 つ指定します。キーの中の列と同じ数だけ値を指定できます。すべての値を連結したものが、対応するパーティションの索引におけるキーの最高値となります。変更の始まりENDING AT は、増加対応パーティション表スペースにある表に対しては指定できませんが、表が範囲パーティション化表スペースにある場合は指定する必要があります。変更の終わり
constant
定数値は、その値を列に割り当てるときの規則に適合したデータ・タイプで指定します。ストリング定数がその列の長さ属性に必要な長さより長いか短い場合、 定数は必要な長さになるまで、右端から切り捨てられるか右側に埋め込みが 行われます。列が昇順の場合、埋め込み文字は X'FF' です。列が降順の場合、埋め込み文字は X'00' です。10 進定数の精度と位取りは、それに対応する列の精度と 位取りより大きくてはなりません。16 進数ストリング定数 (GX) は指定できません。
MAXVALUE
パーティション境界の限界キーに対してその最大値よりも大きい値を指定し ます (すなわち、その列が昇順または降順かどうかに関係なくすべてが X'FF')。パーティション・キー内のすべての列が昇順の場合、MAXVALUE の 後ろで定数や MINVALUE 文節を指定できません。MAXVALUE が指定されると、後続の列はすべて MAXVALUE を指定しなければなりません。
MINVALUE
パーティション境界の限界キーに対してその最小値よりも小さい値を指定し ます (すなわち、その列が昇順または降順かどうかに関係なくすべてが X'00')。パーティション・キー内のすべての列が降順の場合、MINVALUE の後に定数または MAXVALUE 文節は指定できません。 MINVALUE が指定された後の後続の列はすべて MINVALUE である必要があります。
このキー値は以下の規則に制約されます。
  • 最初の値がキーの 1 列目に対応し、2 番目の値が 2 列目に 対応するといった形で、以下同様に続いていきます。キーにある列数より少ない数の値を使用すると、列が昇順か降順かに応じて、省略した列に対して最高値または最低値を使用した場合と同じ効果があります。
  • どのパーティションにおいても、キーの最高値は、次のパーティション内のキーの 最高値より低位でなければなりません。
  • 最終パーティションに対して指定した値が適用されます。最終パーティションに対して指定される値は、表に置くことができるキーの最高値です。 限界が以前に適用されなかった場合、追加したパーティションに対して指定した値より大きな既存キー値は、REORG の実行時に DISCARD データ・セットに置かれます。
  • キーに ROWID 列または ROWID データ・タイプに基づく特殊タイプの列が含まれている場合は、対応する ROWID 列に対して指定された定数の先頭 17 バイトが使用されます。
  • 表スペースのパーティション数とそれに対応する限界キー・サイズの組み合わせは、パーティション数 * (106 + 限界キー・サイズのバイト数) (<65394) を超えてはいけません。
  • すべての値の連結が 255 バイトを超える場合は、先頭 255 バイトのみが使用されます。
INCLUSIVE
範囲の指定に使用した値をデータ・パーティションに含めるように指定します。

ADD PARTITION 文節を指定すると、後続のポイント・イン・タイム・リカバリー要求に影響を及ぼす可能性があることに注意してください。 考えられる制約事項、リカバリー状況への影響、およびその他の考慮事項については、ポイント・イン・タイム・リカバリーを参照してください。

ALTER PARTITION:

ALTER PARTITION
指示したパーティションのパーティションに対するパーティション限界キーを変更することを指定します。

この文節は、パーティション化表スペース内の表のみに適用されます。 ALTER PARTITION は、partition-by-growth 表スペースにある表に対して、または XML 列のある表に対して、指定してはなりません。

表がマテリアライズ照会表である場合、または指定の表に対してマテリアライズ照会表が定義されている場合も ALTER PARTITION を指定してはなりません。ただし、アクセラレーテッド照会表が表に定義されている場合は、パーティションを追加できます。

整数
integer を指定する場合は、1 ~ n の範囲内で指定する必要があります (ここで、n は表のパーティション数)。 integer は物理パーティション番号です。表がマテリアライズ照会表である場合、またはマテリアライズ照会表がこの表から定義されている場合は、パーティション境界を変更できません。最終パーティションを除くいずれかのパーティションに対してこのオプションを指定すると、指定したパーティションと後続のパーティションが REORG ペンディング (REORP) 状況になります。
ENDING AT (constant、MAXVALUE、または MINVALUE...)
指定したパーティションのパーティション・キーの最高値を指定します。

ここで言う最高とは、列のソート・シーケンスの中で最高であることを意味します。昇順 (ASC) と して定義された列においては、最高と最低がその言葉通りの意味を持ちます。降順 (DESC) として定義された列においては、実際には 最低の値がソート・シーケンスでは最高値になります。

各 ALTER PARTITION 文節の ENDING AT の後には、値を少なくとも 1 つ指定します。キーの中の列と同じ数だけ値を使うことができます。すべての値を連結したものが、対応するパーティション内のキーの最高値となります。それぞれの最高キー値 (限界キーとも呼ばれる) の長さは、パーティション・キーの長さと同じです。
constant
定数値は、その値を列に割り当てるときの規則に適合したデータ・タイプで指定します。ストリング定数がその列の長さ属性に必要な長さより長いか短い場合、 定数は必要な長さになるまで、右端から切り捨てられるか右側に埋め込みが 行われます。列が昇順の場合、埋め込み文字は X'FF' です。列が降順の場合、埋め込み文字は X'00' です。10 進定数の精度と位取りは、それに対応する列の精度と 位取りより大きくてはなりません。16 進数ストリング定数 (GX) は指定できません。
MAXVALUE
パーティション境界の限界キーに対してその最大値よりも大きい値を指定し ます (すなわち、その列が昇順または降順かどうかに関係なくすべてが X'FF')。パーティション・キー内のすべての列が昇順の場合、MAXVALUE の 後ろで定数や MINVALUE 文節を指定できません。MAXVALUE が指定されると、後続の列はすべて MAXVALUE を指定しなければなりません。
MINVALUE
パーティション境界の限界キーに対してその最小値よりも小さい値を指定し ます (すなわち、その列が昇順または降順かどうかに関係なくすべてが X'00')。パーティション・キー内のすべての列が降順の場合、MINVALUE の後に定数または MAXVALUE 文節は指定できません。 MINVALUE が指定された後の後続の列はすべて MINVALUE である必要があります。
キー値には、パーティション定義用の ENDING AT 文節に関する規則のリストが適用されます。規則のリストを参照してください。

指定する値は、隣接するパーティションのパーティション境界の範囲と等しいか範囲外にあってはなりません。

INCLUSIVE
範囲の指定に使用した値をデータ・パーティションに含めるように指定します。
変更の始まりHASH SPACE integerK|M|G変更の終わり
変更の始まりパーティション・エレメントと関連付けられたパーティションに事前割り振りする固定ハッシュ・スペースの量を指定します。パーティション・エレメントで HASH SPACE を省略した場合は、ORGANIZE BY CLAUSE に指定されている HASH SPACE 値が使用されます。

partition-element の HASH SPACE キーワードは、ハッシュ編成を使用するように表が定義されている場合のみ指定する必要があります。

変更の始まり
K
変更の始まりハッシュ・スペース・サイズをバイト単位で指定するために、整数値に 1024 を掛けることを指定します。この整数は 256 から 268435456 までの間でなければなりません。変更の終わり
M
ハッシュ・スペース・サイズをバイト単位で指定するために、整数値に 1048576 を掛けることを指定します。この整数は 1 から 262144 までの間でなければなりません。
G
ハッシュ・スペース・サイズをバイト単位で指定するために、整数値に 1073741824 を掛けることを指定します。この整数は、範囲パーティション表の場合は 1 から 256 まで、非パーティション化表の場合は、1 から 131072 までである必要があります。
変更の終わり 4G を超える値が指定された場合、表スペースのデータ・セットが拡張形式および拡張アドレッシング機能 で指定された DFSMS データ・クラスと関連している。変更の終わり

表が索引制御パーティションを使用している場合は、表制御パーティションを使用するように変換されます。 最終パーティションに対する最高限界キーは、昇順キー列の場合は可能な最大値、降順キー列の場合は可能な最小値に設定されます。

ALTER PARTITION 文節を指定すると、後続のポイント・イン・タイム・リカバリー要求に影響を及ぼす可能性があることに注意してください。 考えられる制約事項、リカバリー状況への影響、およびその他の考慮事項については、ポイント・イン・タイム・リカバリーを参照してください。

ROTATE PARTITION:

変更の始まり ROTATE PARTITION FIRST または integerTO LAST 変更の終わり
変更の始まり最初の論理パーティションまたは integer に対応する物理パーティションを循環させて最後のパーティションにするように指定します。指定されたパーティションが処理で空にリセットされ、そのパーティションに関連付けられている限界キーは境界指定節で指定される定数に設定されます。昇順限界キーの場合、新規限界キーは、このステートメントが処理される前の既存の最後の論理パーティションの限界キーより高くする必要があります。降順限界キーの場合、新規限界キーは、このステートメントが処理される前の既存の最後の論理パーティションの限界キーより低くする必要があります。

表の定義が完了しており、複数のパーティションを含んでいなければなりません。この文節に続けて ENDING AT 文節を指定する必要があります。この文節は、論理的に最終になるこのパーティションの新しい高いキー限界を指定します。

パーティションの循環は即時に行われます。DELETE RESTRICT を指定した参照制約が表にある場合、ROTATE は失敗する可能性があります。表が索引制御パーティションを使用している場合は、表制御パーティションを使用するように変換されます。

ROTATE PARTITION 文節を指定した ALTER TABLE ステートメントの実行後に、RUNSTATS ユーティリティーまたは STATISTICS オプションを指定した REORG ユーティリティーを表スペースに対して実行して、効率的なアクセス・パスが選択対象になるようにする必要があります。

表にセキュリティー・ラベル列がある場合、パーティションを循環させるユーザーは有効なセキュリティー・ラベルを持っている必要があります。また、write-down (ライトダウン) が有効になっている場合、ユーザーには write-down privilege (ライトダウン特権) が必要です。

ROTATE PARTITION は、以下の状態では指定してはなりません。

  • 表がマテリアライズ照会表であるか、または表にマテリアライズ照会表が定義されている。
  • 表が、増加対応パーティション表スペース内にある。
  • 表に XML 列がある。
  • 表が、システム期間テンポラル表、または履歴表である。

アクセラレーテッド照会表が表に定義されている場合は、パーティションを追加できます。

変更の終わり
変更の始まり integer 変更の終わり
変更の始まりSYSIBM.SYSTABLEPART カタログ表の PARTITION 列で識別される物理パーティション番号を表す正整数を指定します。そのパーティションは、その表に存在するデータ・パーティションである必要があります。そのパーティションは、表の最後のパーティションであってはなりません。変更の終わり
ENDING AT (constant、 MAXVALUE、または MINVALUE...)
ENDING AT 文節は、最も古いデータを保持している既存のパーティションに対して新しい高いキー限界を指定します。

ここで言う最高とは、列のソート・シーケンスの中で最高であることを意味します。昇順 (ASC) と して定義された列においては、最高と最低がその言葉通りの意味を持ちます。降順 (DESC) として定義された列においては、実際には 最低の値がソート・シーケンスでは最高値になります。

ENDING AT の後には、値を少なくとも 1 つ指定します。キーの中の列と同じ数だけ値を使うことができます。すべての値を連結したものが、対応するパーティション内のキーの最高値となります。それぞれの最高キー値 (限界キーとも呼ばれる) の長さは、パーティション・キーの長さと同じです。
constant
定数値は、その値を列に割り当てるときの規則に適合したデータ・タイプで指定します。ストリング定数がその列の長さ属性に必要な長さより長いか短い場合、 定数は必要な長さになるまで、右端から切り捨てられるか右側に埋め込みが 行われます。列が昇順の場合、埋め込み文字は X'FF' です。列が降順の場合、埋め込み文字は X'00' です。10 進定数の精度と位取りは、それに対応する列の精度と 位取りより大きくてはなりません。16 進数ストリング定数 (GX) は指定できません。
MAXVALUE
パーティション境界の限界キーに対してその最大値よりも大きい値を指定し ます (すなわち、その列が昇順または降順かどうかに関係なくすべてが X'FF')。パーティション・キー内のすべての列が昇順の場合、MAXVALUE の 後ろで定数や MINVALUE 文節を指定できません。MAXVALUE が指定されると、後続の列はすべて MAXVALUE を指定しなければなりません。
MINVALUE
パーティション境界の限界キーに対してその最小値よりも小さい値を指定し ます (すなわち、その列が昇順または降順かどうかに関係なくすべてが X'00')。パーティション・キー内のすべての列が降順の場合、MINVALUE の後に定数または MAXVALUE 文節は指定できません。 MINVALUE が指定された後の後続の列はすべて MINVALUE である必要があります。
キー値には、パーティション定義用の ENDING AT 文節に関する規則のリストが適用されます。規則のリストを参照してください。
INCLUSIVE
範囲の指定に使用した値をデータ・パーティションに含めるように指定します。
RESET
最初の論理パーティションの既存データを削除するように指定します。 さらに、関連する物理索引パーティションおよび論理索引パーティションにあるキー項目が削除されます。 昇順の限界値をもつパーティション表では、ALTER TABLE ROTATE PARTITION FIRST TO LAST は、最低の高いキー限界をもつパーティションをドロップし、指定した高いキー限界をもつ新規パーティションを追加するように論理上は動作します。 このパーティションに対する新しいキー限界は、表にある他のパーティションよりも高くする必要があります。限界キーが降順の場合、この循環は、最高の限界値をもつパーティションが最低の限界値をもつパーティションになるように動作します。
変更の始まりパーティションに次の属性のいずれかが含まれている場合は、パーティション内のそれぞれのデータ行を個々に削除する必要があります。
  • REFERENTIAL INTEGRITY PARENT 関係
  • DATA CAPTURE ロギングが有効
  • 行削除トリガー
変更の終わり

変更の始まり表が範囲パーティション化ユニバーサル表スペースに常駐し、以前の属性のいずれも持っていない場合は、一括削除処理を使用して、データ行を削除できます (個々のデータ行が操作されたりログ記録されたりすることはありません)。変更の終わり

ROTATE PARTITION 文節を指定すると、後続のポイント・イン・タイム・リカバリー要求に影響を及ぼす可能性があることに注意してください。 考えられる制約事項、リカバリー状況への影響、およびその他の考慮事項については、ポイント・イン・タイム・リカバリーを参照してください。

ADD 編成

変更の始まり ADD ORGANIZE BY HASH 変更の終わり
変更の始まり表のデータ編成にハッシュを使用することを指定します。

APPEND YES 文節を指定して表が既に定義されているか、MEMBER CLUSTER 文節を使用して表スペースが定義されている場合は、ADD ORGANIZE BY HASH を指定しないでください。

ALTER TABLE ADD ORGANIZE BY HASH は、表が増加対応パーティション表スペースまたは範囲パーティション・ユニバーサル表スペースである場合にのみ許可されます。

ALTER TABLE ADD ORGANIZE BY HASH は、相対番号付けを使用する表スペースでは許可されません。

変更の始まりADD ORGANIZE BY HASH を、基本行形式を使用する表に指定しないでください。変更の終わり

ユーザー指定のクラスタリング索引が存在する場合は、ADD ORGANIZE BY HASH を指定しないでください。

ADD ORGANIZE BY HASH は、グローバル一時表には指定しないでください。

変更の始まりADD ORGANIZE BY HASH を指定した ALTER TABLE が実行されると、以下のようになります。変更の終わり

変更の始まり
  • ハッシュ・キーの一部である列がすべて更新できなくなります。 ハッシュ・キーの列を更新する SQL ステートメントはエラーを返します。
  • 表を含む表スペース全体を再編成する必要があります。
変更の終わり 変更の始まりこの文節またはキーワードを使用すると、ターゲット・オブジェクトに依存するパッケージや、カスケード効果により、その関連オブジェクトに依存するパッケージが無効になることがあります。パッケージを無効化する変更を参照してください。変更の終わり
変更の始まりUNIQUE変更の終わり
DB2 がハッシュ・キー列の固有性を強制し、同じ値のハッシュ・キーがある 2 つ以上の行が表に含まれないように指定します。
(column-name,...)
列名のリストによって、行の配置先を決定するために使用されるハッシュ・キーが定義されます。
この column-name は、表の列を識別する非修飾 名でなければなりません。同じ列を複数回指定してはなりません。指定する列は NOT NULL として定義されている必要があります。 指定する列の数は 64 を超えてはいけません。また、その長さ属性の合計が、 255 を超えてはいけません。指定する列は、次のタイプの列であってはなりません。
  • LOB 列
  • DECFLOAT 列
  • XML 列
  • 前述のいずれかのデータ・タイプに基づく特殊タイプ列

PARTITION BY RANGE として表を定義する場合、列名リストでは、表の partition-expression に指定されているすべての列名を指定する必要があり、partition-expression と同じ順序で列名を指定する必要があります。 表の partition-expression に含まれる列数より多い列を ORGANIZE BY 文節が含む場合は、partition-expression によってパーティション番号が決定されます。

HASH SPACE integerK|M|G
表に事前割り振りする固定ハッシュ・スペースの量を指定します。範囲パーティション化表の場合は、これが各パーティション用のスペースです。

デフォルトは、64M (増加対応パーティション・ユニバーサル表スペースの表の場合) または 64M (範囲パーティション・ユニバーサル表スペースの各パーティションの場合) です。

変更の始まり
K
変更の始まりハッシュ・スペース・サイズをバイト単位で指定するために、整数値に 1024 を掛けることを指定します。この整数は 256 から 268435456 までの間でなければなりません。変更の終わり
M
ハッシュ・スペース・サイズをバイト単位で指定するために、整数値に 1048576 を掛けることを指定します。この整数は 1 から 262144 までの間でなければなりません。
G
ハッシュ・スペース・サイズをバイト単位で指定するために、整数値に 1073741824 を掛けることを指定します。この整数は、範囲パーティション表の場合は 1 から 256 まで、非パーティション化表の場合は、1 から 131072 までである必要があります。
変更の終わり 4G を超える値が指定された場合、表スペースのデータ・セットが拡張形式および拡張アドレッシング機能 で指定された DFSMS データ・クラスと関連している。
変更の終わり

ALTER ORGANIZATION:

変更の始まり ALTER ORGANIZATION SET HASH SPACE integer 変更の終わり
変更の始まり表のデータ編成に使用される固定ハッシュ・スペースを変更します。 表は、ハッシュ編成を使用するように定義されている必要があります。

範囲パーティション化として定義されている表の場合、integer によって指定される値は、パーティションごとの値であり、表の各パーティションに適用されます。範囲パーティション化でない表の場合は、integer は、表全体に適用されます。

新規ハッシュ・スペース値は、REORG ユーティリティーを使用して表スペースが再編成されるときに適用されます。

HASH SPACE integerK|M|G
表に事前割り振りする固定ハッシュ・スペースの量を指定します。範囲パーティション化表の場合は、これが各パーティション用のスペースです。
K
ハッシュ・スペース・サイズをバイト単位で指定するために、整数値に 1024 を掛けることを指定します。この整数は 256 から 67108864 までの間でなければなりません。
M
ハッシュ・スペース・サイズをバイト単位で指定するために、整数値に 1048576 を掛けることを指定します。この整数は 1 から 65536 までの間でなければなりません。
G
ハッシュ・スペース・サイズをバイト単位で指定するために、整数値に 1073741824 を掛けることを指定します。この整数は、範囲パーティション化表の場合は 1 から 64 まで、非パーティション化表の場合は、1 から 131,072 までである必要があります。
4G を超える値が指定された場合、表スペースのデータ・セットが拡張形式および拡張アドレッシング機能 で指定された DFSMS データ・クラスと関連している。
変更の終わり

ALTER ORGANIZATION 文節を指定すると、後続のポイント・イン・タイム・リカバリー要求に影響を及ぼす可能性があることに注意してください。 考えられる制約事項、リカバリー状況への影響、およびその他の考慮事項については、ポイント・イン・タイム・リカバリーを参照してください。

DROP ORGANIZATION:

変更の始まり DROP ORGANIZATION 変更の終わり
変更の始まり表のデータ編成定義をドロップすることを指定します。 表全体がアクセス不能になり、REORG 保留状況になります。表をアクセス可能にするには REORG を実行する必要があります。 範囲パーティション・ユニバーサル表スペースにある表の場合は、その表スペース全体を一度に再編成する必要があります。

いずれかのタイプのクラスタリングが必要な場合は、クラスタリング索引を作成するか、MEMBER CLUSTER 文節を表に追加する必要があります。

REORG ユーティリティーの次回実行後に、ハッシュ・スペース値がクリアされ、暗黙で作成されたハッシュ・オーバーフロー索引がドロップされます。

DROP ORGANIZATION は、ハッシュ編成を使用するように表が定義されている場合のみ指定する必要があります。

ハッシュ編成を使用する表のハッシュ・キー用に指定されている列を変更する場合は、まず ALTER DROP ORGANIZATION を使用してハッシュ・キーの定義をドロップする必要があります。その後で、ALTER ADD organization-clause を使用してハッシュ・キー用の新規の列を指定できます。

変更の始まりこの文節またはキーワードを使用すると、ターゲット・オブジェクトに依存するパッケージや、カスケード効果により、その関連オブジェクトに依存するパッケージが無効になることがあります。パッケージを無効化する変更を参照してください。変更の終わり

変更の終わり

DROP ORGANIZATION 文節を指定すると、後続のポイント・イン・タイム・リカバリー要求に影響を及ぼす可能性があることに注意してください。 考えられる制約事項、リカバリー状況への影響、およびその他の考慮事項については、ポイント・イン・タイム・リカバリーを参照してください。

ADD VERSIONING:

変更の始まり ADD VERSIONING 変更の終わり
変更の始まり変更の始まり表がシステム期間テンポラル表であることを指定します。

表はシステム期間テンポラル表かまたは履歴表として既に定義されていてはなりません。

表に SYSTEM_TIME 期間と transaction-start-ID 列が定義されている必要があります。transaction-start-ID 列のデータ・タイプ、長さ、精度、および位取りは、表の SYSTEM_TIME 期間の row-begin 列および row-end 列と同じように定義する必要があります。表を、表スペースにおいて唯一の表にする必要があります。この表は、マテリアライズ照会表、不完全な表、補助表、クローン関係に組み込まれている表、XML 列用に暗黙的に作成された表、またはセキュリティー・ラベル列を含む表であってはなりません。ADD VERSIONING は、ALTER TABLE ステートメントの他の文節に指定してはなりません。

特権セットには、関連した履歴表に対して ALTER TABLE ステートメントを発行する特権が含まれていなければなりません。

表の行の履歴バージョンは、DB2 によって保持されます。システム期間テンポラル表には、表に行が挿入された時点、およびこの行が更新または削除された時点を示す追加情報が含まれています。関連履歴表は、表の履歴行を保管するために使用されます。システム期間テンポラル表内のデータが更新されると、その行の前のバージョンは関連する履歴表に保持されます。システム期間テンポラル表内のデータが削除されると、その行の最終バージョンが履歴表に挿入されます。

この表に対する参照には、戻すデータのバージョンを指示する期間文節を含めることができます。

変更の始まりこの文節またはキーワードを使用すると、ターゲット・オブジェクトに依存するパッケージや、カスケード効果により、その関連オブジェクトに依存するパッケージが無効になることがあります。パッケージを無効化する変更を参照してください。変更の終わり

変更の終わり変更の終わり
変更の始まり USE HISTORY TABLE history-table-name 変更の終わり
変更の始まりシステム期間テンポラル表の履歴行を保持する履歴表を指定します。

変更の始まり履歴表にデータが含まれている場合、データが履歴行を正確に表すようにしてください。 データが履歴行の結果を正確に表さない場合、テンポラル照会が予期しない結果になる可能性があります。変更の終わり

history-table-name は現行サーバーに存在する表を示すものでなければならず、以下のいずれかの表を示すものであってはなりません。

  • カタログ表。
  • 変更の始まりシステム期間テンポラル表。前のステートメントによってシステム期間テンポラル表として表が定義されているか、現在のステートメントが表をシステム期間テンポラル表として定義しています。変更の終わり
  • 既存の履歴表。
  • 宣言済みグローバル一時表。
  • 作成されたグローバル一時表。
  • マテリアライズ照会表。
  • ビュー。
  • 補助表。
  • XML 列用に暗黙的に作成された表。
  • クローン関係に組み込まれている表。
履歴表を、表スペースにおいて唯一の表にする必要があります。
制約事項:
  • 履歴表には以下の列のいずれも含めることはできません。
    • ID 列
    • 行変更タイム・スタンプ列
    • 行開始列
    • 行終了列
    • トランザクション開始 ID 列
    • 列マスク
    • セキュリティー・ラベル列。
  • 履歴表に期間を含めることはできません。
  • 履歴表に不完全な表定義があってはなりません。
  • 変更の始まり履歴表に行の許可を定義してはなりません。変更の終わり

システム期間テンポラル表および指定した履歴表のコード化スキームおよび CCSID は、同じでなければなりません。

システム期間テンポラル表および指定した履歴表の列は、同じ数で同じ順序でなければなりません。2 つの表の対応する列の以下の属性は同じでなければなりません。

  • 名前
  • データ・タイプ
  • 長さ (インライン LOB 長は除く)、精度、および位取り
  • サブタイプおよび CCSID
  • NULL 属性
  • 非表示属性
  • フィールド・プロシージャー

システム期間テンポラル表の列を ROWID GENERATED ALWAYS として定義する場合、対応する履歴列は ROWID GENERATED ALWAYS として定義する必要があります。

システム期間テンポラル表の列を GENERATED ALWAYS FOR EACH ROW ON UPDATE OF ROW CHANGE TIMESTAMP または GENERATED AS IDENTITY として定義する場合、対応する履歴表の列を GENERATED 属性で定義することはできません。

変更の終わり

DROP VERSIONING:

変更の始まり DROP VERSIONING 変更の終わり
変更の始まり表がシステム期間テンポラル表でなくなることを指定します。table-name は、システム期間テンポラル表を示していなければなりません。表の履歴データは、記録も保守もされなくなります。表 table-name の列およびデータの定義は変更されませんが、表はシステム期間テンポラル表として処理されなくなります。SYSTEM_TIME 期間は保持されます。システム期間テンポラル表と履歴表との間の関係は解除されます。履歴表はドロップされず、2 つの表の間の関係が解除されるだけです。この表を参照する後続の照会では、この表の SYSTEM_TIME 期間は指定してはなりません。

変更の始まりこの文節またはキーワードを使用すると、ターゲット・オブジェクトに依存するパッケージや、カスケード効果により、その関連オブジェクトに依存するパッケージが無効になることがあります。パッケージを無効化する変更を参照してください。変更の終わり

SYSTEM_TIME 期間に依存するビュー、マテリアライズ照会表定義、または SQL 表関数がある場合、バージョン管理はドロップできません。

DROP VERSIONING は、ALTER TABLE ステートメントの他の文節で指定してはなりません。

特権セットには、関連した履歴表に対して ALTER TABLE ステートメントを発行する特権が含まれていなければなりません。

変更の終わり

ADD MATERIALIZED QUERY:

ADD MATERIALIZED QUERY materialized-query-definition
基本表をマテリアライズ照会表に変更します。通常の表をマテリアライズ照会表にするための定義を提供します。table-name によって指定される表と、全選択の結果列には、次の特性があってはなりません。
  • 既にマテリアライズ照会表として定義されている
  • 主キー、ユニーク制約 (ユニーク索引)、参照制約 (外部キー)、チェック制約、またはトリガーが定義されている
  • 別のマテリアライズ照会表の定義内で参照されている
  • fullselect の中で直接または間接的に参照されている
  • 不完全な状態にある
  • 変更の始まりシステム期間テンポラル表、または履歴である変更の終わり
  • 変更の始まり行アクセス制御または列アクセス制御が活動化された基本表である変更の終わり
  • 変更の始まり行の許可または列マスクが定義されている基本表である変更の終わり
table-name がこれらの基準を満たさない場合は、エラーが発生します。

変更の始まり全選択に期間指定が含まれていてはなりません。変更の終わり

変更の始まり全選択の FROM 文節に指定されたオブジェクトを、長さ 0 の列を持つビューにすることはできません。変更の終わり

全選択
表の基礎となる照会を定義します。既存の表の列は、次の特性を満たしている必要があります。
  • 列の数が同じである
  • 列定義が厳密に同じである
  • 同じ列名が同じ順序で並んでいる

変更の始まりfullselect は、行アクセス制御または列アクセス制御が活動化されている基本表、または行の許可または列マスクが定義されている基本表を、直接的であっても間接的であっても参照してはなりません。変更の終わり

変更の始まりfullselect には、作成されたグローバル一時表、宣言済みグローバル一時表、アクセラレーターのみの表、ディレクトリー表、または別のマテリアライズ照会表への参照を含めることはできません。変更の終わり

全選択を指定する場合、変更対象の表の所有者は、全選択の中で参照される表またはビューに対して SELECT 特権を持っている必要があります。SELECT 特権を持っているとは、所有者が次のうち少なくとも 1 つの許可を持っていることを意味します。

  • 全選択の中で参照される表またはビューの所有権
  • 全選択の中で参照される表またはビューに対する SELECT 特権
  • SYSADM 権限
  • 全選択の表を格納しているデータベースに対する DBADM 権限

全選択で参照されている他のオブジェクトにアクセスするのに追加の特権が必要になる可能性があります。

表の所有者が SELECT 特権を持っていない場合は、全選択の表を格納しているデータベースに対して、次の許可 ID が SYSADM 権限または DBADM 権限を持っている必要があります。

  • 組み込みステートメントの場合は、プランまたはパッケージ所有者の許可 ID
  • 動的に準備されるステートメントの場合は、プロセスの SQL 許可 ID

マテリアライズ照会表に対する fullselect 指定方法の詳細は、CREATE TABLE ステートメントの説明にある fullselect の定義を参照してください。

変更の始まりこの文節またはキーワードを使用すると、ターゲット・オブジェクトに依存するパッケージや、カスケード効果により、その関連オブジェクトに依存するパッケージが無効になることがあります。パッケージを無効化する変更を参照してください。変更の終わり
refreshable-table-options
通常の表をマテリアライズ照会表に変更するためのマテリアライズ照会表オプションを指定します。ORDER BY 文節は許可されますが、REFRESH によってのみ使用されます。ORDER BY 文節を使用すると、マテリアライズ照会表にあるデータを参照する場合の局所性が向上する可能性があります。
DATA INITIALLY DEFERRED
表のデータをこの ALTER TABLE ステートメントの中で検証しないように指定します。REFRESH TABLE ステートメントを使用して、マテリアライズ照会表のデータが、表の基礎になる照会の結果と同じであることを保証できます。
REFRESH DEFERRED
REFRESH TABLE ステートメントを使用して、表のデータをいつでもリフレッシュできるように指定します。照会結果が表のデータに反映される時期は、REFRESH TABLE ステートメントが処理される時点でスナップショットとして、またはユーザー管理のマテリアライズ照会表をユーザーが更新したときに限られます。
MAINTAINED BY SYSTEM または MAINTAINED BY USER
マテリアライズ照会表のデータを保守する方法を指定します。
MAINTAINED BY SYSTEM
マテリアライズ照会表 table-name のデータをシステムが保守するように指定します。REFRESH TABLE ステートメントのみをこの表に対して実行できます。
MAINTAINED BY USER
マテリアライズ照会表 table-name のデータをユーザーが保守するように指定します。このユーザーは、LOAD ユーティリティーまたは SQL データ変更ステートメントおよび REFRESH TABLE の各ステートメントを表に対して使用できます。
ENABLE QUERY OPTIMIZATION または DISABLE QUERY OPTIMIZATION
最適化のためにこのマテリアライズ照会表を使用できることを指定します。
ENABLE QUERY OPTIMIZATION
照会を最適化するためにマテリアライズ照会表を使用できることを指定します。指定された全選択が照会の最適化に関する制約事項を満たさない場合は、エラーが発生します。照会最適化の条件を満たすための規則について詳しくは、『CREATE TABLEステートメントにある materialized-query-definition』を参照してください。
DISABLE QUERY OPTIMIZATION
照会を最適化するためにマテリアライズ照会表を使用できないことを指定します。それでも、表を直接照会することはできます。

ALTER MATERIALIZED QUERY:

ALTER MATERIALIZED QUERY materialized-query-table-alteration
マテリアライズ照会表の属性を変更します。table-name はマテリアライズ照会表を示している必要があります。
SET refreshable-table-alteration
表を保守する方法、または表を照会の最適化に使用できるかどうかを変更します。
MAINTAINED BY SYSTEM
マテリアライズ照会表 table-name のデータをシステムが保守するように指定します。
MAINTAINED BY USER
マテリアライズ照会表 table-name のデータをユーザーが保守するように指定します。
ENABLE QUERY OPTIMIZATION
マテリアライズ照会表 table-name を照会の最適化に使用できることを指定します。マテリアライズ照会表に対して指定された全選択が、照会の自動最適化に関する制約事項を満たさない場合は、エラーが発生します。照会最適化の条件を満たすための規則について詳しくは、CREATE TABLEを参照してください。
DISABLE QUERY OPTIMIZATION
マテリアライズ照会表 table-name を照会の最適化に使用できないことを指定します。それでも、表を直接照会することはできます。

変更の始まりこの文節またはキーワードを使用すると、ターゲット・オブジェクトに依存するパッケージや、カスケード効果により、その関連オブジェクトに依存するパッケージが無効になることがあります。パッケージを無効化する変更を参照してください。変更の終わり

DROP MATERIALIZED QUERY:

DROP MATERIALIZED QUERY
マテリアライズ照会表を変更して、その表がマテリアライズ照会表と見なされないようにします。table-name によって指定される表は、マテリアライズ照会表として定義されている必要があります。その名前の列とデータの定義は変更されませんが、表は照会の最適化に使用できなくなり、REFRESH TABLE ステートメントにこの表を指定しても無効になります。

変更の始まりこの文節またはキーワードを使用すると、ターゲット・オブジェクトに依存するパッケージや、カスケード効果により、その関連オブジェクトに依存するパッケージが無効になることがあります。パッケージを無効化する変更を参照してください。変更の終わり

DATA CAPTURE:

DATA CAPTURE
表に対する以下のアクションをログに記録する際に、追加情報を付け加えるか どうかを指定します。
  • SQL データ変更操作
  • 列追加 (ADD COLUMN 文節を使用)
  • 列変更 (ALTER COLUMN 文節を使用)
拡張ログ・レコードの使い方については、下記を参 照してください。
  • IMS DataPropagator: An Introduction」 にある IMS™ へのデータ伝搬に関する記述
  • Remote Recovery Data Facility Program Description and Operations」にあるリモート・リカバリー・データ機能 (RRDF) の使用手順
  • DB2 管理ガイド」にあるログ・レコードの読み取り手順
NONE
追加情報をログに記録しません。
CHANGES
SQL の更新に関する追加データをログに書き込みます。任意の LOB 列または XML 列で表される値に関する情報は、利用できません。NOT LOGGED を指定する表スペース内にある表に対して、DATA CAPTURE CHANGES を指定しないでください。

変更の始まりDATA CAPTURE CHANGES 文節は、行アクセス制御または列アクセス制御がアクティブな表に対して指定できます。ただし、アクセス制御は、ログに書き込まれるデータは保護しません。変更の終わり

ログに記録した更新に関する追加データをカタログ表に記録する方法について詳しくは、を参照してください。

VOLATILE:

VOLATILE or NOT VOLATILE
DB2 が表へのアクセスを選択する方法を指定します。
VOLATILE
変更の始まり可能ならば、DB2 が SQL 操作のために表への索引アクセスを使用するように指定します。ただし、VOLATILE の使用時には、リスト・プリフェッチおよび他のいくつかの最適化手法が使用できなくなる可能性があることに注意してください。

VOLATILE の使用が望ましい 1 つの例は、サイズが大きく変わる可能性がある表の場合です。表が空か数行しかないときに統計を取ると、表の行数が多くなったときにその統計が適さなくなる可能性があります。

VOLATILE の使用が望ましいもう 1 つの例は、表の主キーによる定義に従って行のグループを格納する表の場合です。最終列を除き、このような表の主キーの列はすべて、それぞれの行が所属するグループを示します。主キーの最終列は、行をグループから読み取る順序を示すシーケンス番号です。VOLATILE を使用すると、それぞれの操作ごとに行が同じ順序でアクセスされるので、各グループ内の行に対する操作の並行性が最大になります。変更の始まりこの使用法では、1 次索引は表に定義された唯一の索引でなければならず、行がロックされる順序を確保するために、リスト・プリフェッチを使用できなくなります。変更の終わり

変更の終わり
NOT VOLATILE
DB2 が表への SQL アクセスを現行の統計に基づいて行うように指定します。
CARDINALITY
オプションのキーワードで、現在は効果がありませんが 、DB2 ファミリーの互換性を保つために提供されています。

ADD CLONE:

ADD CLONE clone-table-name
変更の始まりクローン表 (clone-table-name で指定) が、変更対象の表に対して作成されることを指定します。この名前 (暗黙的または明示的修飾子を含む) は、 現行サーバーの中にある表、ビュー、別名、またはシノニムを 示すものであってはなりません。 この名前は、SYSPENDINGOBJECTS カタログ表に存在する表を示すものであってはなりません。このクローン表は、基本表と同じ表スペース内に作成され、基本表と同じ構造を持っています。これには、列名、データ・タイプ、ヌル属性、チェック制約、索引が含まれます (ただし、それらに限定されません)。指定された基本表のクローンを作成するのに ADD CLONE を使用する場合、その基本表は以下の規則に従う必要があります。
  • DB2 によって管理されるユニバーサル表スペースに存在する
  • 変更の始まり表スペースまたはその従属オブジェクト (LOB、XML、または索引) が DEFINE NO 文節指定で作成されている場合、すべてのデータ・セットは作成済みにする必要がある変更の終わり
  • 表スペース内の唯一の表である
  • クローン表を指定して定義されていない
  • 変更の始まりハッシュ編成を使用するように定義されていない変更の終わり
  • どの参照制約にも関係していない
  • どの AFTER トリガーとも一緒に定義されていない
  • マテリアライズ照会表ではない
  • どのような保留状態の変更もない
  • どのようなアクティブ状態のバージョン処理もない
  • 不完全な定義がない
  • 作成されたグローバル一時表、または宣言されたグローバル一時表でない
  • システム期間テンポラル表、または履歴表でない
  • 基本表で相対番号付けを使用する場合、クローン表に変更されていない

基本表とクローン表は、アクセス制御に関しては関連がないと見なされます。行アクセス制御または列アクセス制御は、基本表またはクローン表、あるいはこの両方とは無関係に活動化できます。

変更の終わり

DROP CLONE:

DROP CLONE
指定の基本表に関連したクローン表をドロップすることを指定します。table-name は、現行サーバーに存在する基本表を指定する必要があり、その表はクローン表を定義しておく必要があります。

変更の始まりクローン表がドロップされると、そのクローン表に定義された行の許可または列マスクもドロップされます。クローン表が行の許可または列マスクの定義で参照されている場合、ALTER ステートメントからエラーが戻されます。変更の終わり

RESTRICT ON DROP:

ADD RESTRICT ON DROP
表およびデータベース、ならびに表が入った表スペースのドロップを制限します。
DROP RESTRICT ON DROP
表およびデータベース、ならびに表が入った表スペースの除去に関する制限を 除去します。
変更の始まり

ROW ACCESS CONTROL:

ACTIVATE ROW ACCESS CONTROL
変更の始まり表の行アクセス制御を活動化する必要があることを指定します。表が別名またはシノニムである場合は、基本表の行アクセス制御が活動化されます。
表は、以下のいずれかの表であってはなりません。
  • 作成済みの一時表
  • マテリアライズ照会表の定義で直接的または間接的に参照される表
  • セキュリティー・ラベル列が含まれている表
  • システム期間テンポラル表
  • 履歴表

表のトリガーが存在する場合、そのトリガーは SECURED 文節で定義されている必要があります。

この表は、以下の条件に当てはまる場合は、ビューの定義で参照されていてはなりません。

  • ビューが WITH CHECK OPTION 文節で定義されている
  • ビューの INSTEAD OF トリガーが存在し、このトリガーが SECURED 文節で定義されていない

使用可能に設定されていて、かつ行の許可の定義で指定された許可 ID またはロールのアクセス権限を提供する別の行の許可がない限り、表のデフォルトの行の許可が暗黙的に作成され、表のどの行にもアクセスできなくなります。このような行の許可が存在して使用可能に設定される前に照会で表を参照すると、表にデータがないことを示す警告が戻されます。

変更の始まり期間指定がある表にはデフォルトの行の許可を定義できないため、期間を表に定義する場合は、ACTIVATE ROW ACCESS CONTROL を指定しないでください。変更の終わり

表が SELECT、INSERT、UPDATE、DELETE、または MERGE ステートメントで参照される場合は、デフォルトの行の許可を含む、表で使用できるように設定されたすべての行の許可が、表にアクセスできる行セットを制御するために適用されます。以前に行の許可を再生成しようとして失敗したために、使用可能ないずれかの行の許可が無効であると、行アクセス制御は活動化できません。

ACTIVATE ROW ACCESS CONTROL は、表の行アクセス制御が既に活動化されている場合は、無視されます。

変更の始まりこの文節またはキーワードを使用すると、ターゲット・オブジェクトに依存するパッケージや、カスケード効果により、その関連オブジェクトに依存するパッケージが無効になることがあります。パッケージを無効化する変更を参照してください。変更の終わり

変更の終わり
DEACTIVATE ROW ACCESS CONTROL
表の行アクセス制御を非活動化することを指定します。表が SELECT、INSERT、UPDATE、DELETE、または MERGE ステートメントで参照される場合、表で使用可能な既存の行の許可は、表にアクセスできる行セットを制御するために適用されることはありません。

DEACTIVATE ROW ACCESS CONTROL は、行アクセス制御をこの表に対して活動化しないよう既に定義されている場合は、無視されます。

変更の始まりこの文節またはキーワードを使用すると、ターゲット・オブジェクトに依存するパッケージや、カスケード効果により、その関連オブジェクトに依存するパッケージが無効になることがあります。パッケージを無効化する変更を参照してください。変更の終わり

変更の終わり
変更の始まり

COLUMN ACCESS CONTROL:

ACTIVATE COLUMN ACCESS CONTROL
変更の始まり表の列アクセス制御を活動化する必要があることを指定します。表が別名またはシノニムである場合は、基本表の列アクセス制御が活動化されます。

表は、以下のいずれかの表であってはなりません。

  • 作成済みの一時表
  • マテリアライズ照会表の定義で直接的または間接的に参照される表
  • システム期間テンポラル表
  • 履歴表

表のトリガーが存在する場合、そのトリガーは SECURED 文節で定義されている必要があります。

この表は、以下の条件に当てはまる場合は、ビューの定義で参照されていてはなりません。

  • ビューが WITH CHECK OPTION 文節で定義されている
  • ビューの INSTEAD OF トリガーが存在し、このトリガーが SECURED 文節で定義されていない

列アクセス制御が活動化されている場合、表に対するアクセスは制限されません。ただし、この表が SELECT、INSERT、UPDATE、DELETE、または MERGE ステートメントで参照される場合、表で使用可能なすべての列マスクが、最終結果表で参照される列に対して戻される値をマスクしたり、SQL データ変更ステートメントで使用される新しい値を判別したりするために適用されます。以前に列マスクを再生成しようとして失敗したために、使用可能ないずれかの列マスクが無効になっていると、列アクセス制御を活動化できません。

ACTIVATE COLUMN ACCESS CONTROL は、表の列アクセス制御が既に活動化されている場合は、無視されます。

変更の始まりこの文節またはキーワードを使用すると、ターゲット・オブジェクトに依存するパッケージや、カスケード効果により、その関連オブジェクトに依存するパッケージが無効になることがあります。パッケージを無効化する変更を参照してください。変更の終わり

変更の終わり
DEACTIVATE COLUMN ACCESS CONTROL
表の列アクセス制御を非活動化することを指定します。この表が SELECT、INSERT、UPDATE、DELETE、または MERGE ステートメントで参照される場合、表で使用可能なすべての既存の列マスクは、最終結果表で参照される列に対して戻される値を制御したり、新しい値が SQL データ変更ステートメントで使用できるかどうかを判別したりするために適用されることはありません。

DEACTIVATE COLUMN ACCESS CONTROL は、列アクセス制御をこの表に対して活動化しないよう既に定義されている場合は、無視されます。

変更の始まりこの文節またはキーワードを使用すると、ターゲット・オブジェクトに依存するパッケージや、カスケード効果により、その関連オブジェクトに依存するパッケージが無効になることがあります。パッケージを無効化する変更を参照してください。変更の終わり

変更の終わり

APPEND:

APPEND NO または APPEND YES
表に対する追加処理を使用するかどうかを指定します。APPEND 文節は、作業ファイル表スペースにある表に対して指定してはなりません。

基本表が範囲パーティション化表スペースにある場合は、LOB 表の APPEND オプションがパーティションごとに異なる可能性があります (各パーティションの LOB 表スペースおよび関連オブジェクトが明示的に作成されたのか暗黙的に作成されたのかによる)。増加対応パーティション表スペースにある基本表の場合は、LOB 表の APPEND 属性が、各パーティションによって継承されます。

NO
表に対する追加処理を使用しないことを指定します。挿入操作とロード操作の場合、DB2 は、行のクラスター・キー列にある値に関して、うまくクラスター化された方法でデータ行を配置しようとします。
YES
挿入操作および LOAD 操作時にクラスター化に関係なく表にデータ行を配置することを指定します。

AUDIT:

AUDIT
表の監査属性を変更します。監査トレース・クラスについては、 「DB2 管理ガイド」を参照してください。
NONE
表がアクセスされたときに監査を行わないように指定します。
CHANGES
最初の挿入、更新、または削除操作の間に表がアクセスされたときに、監査を行うように指定します。 ただし、監査が行われるのは、適切な監査トレース・クラスがアクティブな場合だけです。
ALL
ユーティリティーまたはアプリケーション・プロセスによって実行される任意の種類の最初の操作中に表がアクセスさ れたときに、監査を行うように指定します。ただし、監査が行われるのは、適切な監査トレース・クラスがアクティブであり、 COPY、RECOVER、REPAIR、または任意の独立型ユーティリティーを使った アクセスでない場合だけです。

適切な監査トレース・クラスがアクティブな場合に、以下の状況に該当するときは、ALTER TABLE ステートメントの試行の成功および失敗が監査されます。

  • 監査対象表または非監査対象表で、AUDIT 属性が NONECHANGES、または ALL に変更された。
  • AUDIT CHANGES または AUDIT ALL が有効である。

VALIDPROC:

VALIDPROC
表に関する検証プロシージャーを指定するか、あるいは 既存の検証プロシージャーの実行を禁止します。
program-name
表についての新しい検証出口ルーチンとして、program-name を 指定します。

検証プロシージャーは、この表のどの行でもデータ変更操作を禁止することができます。これらの操作が行われる前に、検証プロシージャー に行が渡されます。この表内のどの LOB 列または XML 列により表される値も妥当性検査プロシージャーには受け渡されません。挿入操作または更新操作時に、表にセキュリティー・ラベル列があって、ユーザーが write-down privilege (ライトダウン特権) を持っていない場合、ユーザーのセキュリティー・ラベル値が列の値として検証ルーチンに渡されます。プロシージャーは行を検査した後で、操作を進めるべきかどうか を示す値を戻します。この典型的な使い道は、さまざまな列に現れる値に制約を課すことです。

1 つの表がある一時点で持てる検証プロシージャーは、1 つだけです。新しいプロシージャーを指定すると、既存のプロシージャーは使われなくなります。新しいプロシージャーが、表の既存行の検証に使用されることはありません。これは、ALTER TABLE ステートメントの実行後にロード、挿入、 更新、または削除された行を検証するためだけに使われます。

関連情報:
NULL
表に関する検証ルーチンの使用を中止します。

文節の処理順序:
複数の文節がある場合、文節は次の順序で処理されます。
  1. VALIDPROC
  2. AUDIT
  3. DATA CAPTURE
  4. ROTATE
  5. VOLATILE 文節
  6. APPEND 文節
  7. DROP 文節
  8. ALTER 文節
  9. RENAME 文節
  10. ADD 文節

これらそれぞれの段階の中では、ユーザーが文節を指定した順序が、これらの文節が実行される順序です。

列のデータ・タイプ、長さ、精度、または位取りの変更:
列のデータ・タイプ、長さ、精度、または位取りを変更する場合、以下の情報を考慮してください。
  • 変更の始まり文字データの変更変更の終わり

    列を CHAR から VARCHAR に変換する場合は、通常の割り当て規則が適用されます。つまり、末尾ブランクは切り捨てられずに保持されます。末尾ブランクのない可変長文字ストリングが必要な場合は、データ・タイプを VARCHAR に変更した後、列のデータに対して STRIP 関数を使用してください。

    CHAR FOR BIT DATA 列を BINARY データ・タイプに変換する場合、以下の内容が適用されます。

    • 表の中の既存のスペース文字は 16 進数のゼロ (X'00') には変更されません。
    • その列の現行の長さ属性よりも新規の長さ属性が大きい場合、表の中の値は 16 進数のゼロ (X'00') で埋め込まれます。

    CHAR FOR BIT DATA 列または VARCHAR FOR BIT DATA 列が BINARY データ・タイプまたは VARBINARY データ・タイプに変換されると、既存のデフォルト値はバイナリー・ストリングとしてキャストされます。結果のバイナリー・ストリングは、少なくとも元のサイズの 2 倍になります。結果のバイナリー・ストリングの長さが 1536 UTF-8 バイトを超える場合、変更は失敗します。

  • 固定長から可変長への変更、または可変長列の増大列を固定長から可変長に変更する場合、または可変長列の長さを変更する場合は、個々の値の長さと埋め込みに異常が発生しないように、ALTER TABLE ステートメントを同じ作業単位の中で処理するか、ALTER TABLE ステートメントを処理してから次の処理までの間に再編成を実行してください。
  • 変更の始まりDECIMAL(19,0) から BIGINT への変更変更の終わり

    DB2 9 より前の DB2 のリリースでは、BIGINT データを処理するアプリケーション用に DECIMAL(19,0) データ・タイプを使用することは、お勧めしてきました。パフォーマンス上の理由により、DECIMAL(19,0) 列を BIGINT に変更するのが最善です。注意すべきは、BIGINT データを処理するアプリケーションに使用する DECIMAL(19,0) 列に対してのみ、DECIMAL(19,0) から BIGINT へ変換するということです (これにより、その列内のデータが BIGINT の範囲内にあります)。

    DECIMAL(19,0) から BIGINT への変換時、DECIMAL(19,0) 列内のすべての値は、その変換前に BIGINT の範囲内にあることを確認する必要があります。以下の照会または類似の照会を実行して、どの行 (あるとしたら) に BIGINT の範囲から外れた値が含まれているかを判別できます。
    SELECT * FROM table_name 
        WHERE dec19_0_column > 9223372036854775807 
        OR dec19_0_column < -9223372036854775808;
  • 変更の始まりパーティション・キーの列の変更変更の終わり

    数値データ・タイプを持ったパーティション・キー列がもっと大きな数値データ・タイプに変更され、その列のオリジナルの数値データ・タイプに対する限界キー値 が X'FF の場合、その列の新規数値データ・タイプに対する限界キー値は左側を X'FF で埋められます。例えば、ある列が SMALLINT から INTEGER に変換され、この SMALLINT 列の限界キー値が 32767 (この値は 2 バイトの X'FF を表す) の場合、INTEGER 列の限界キーは 2147483647 (この値は 4 バイトの X'FF を表す) です。

    文字データ・タイプのパーティション・キー列がより長い文字データ・タイプに変更され、その列の元の文字データ・タイプの限界キー値 (列が NULL 可能な場合、最初の NULL バイトは除く) が、すべて X'FF でもすべて 00 でもない場合、その列の新しい文字データ・タイプの限界キー値は、表のエンコード・スキームのブランクで右側が埋められます。例えば、列が CHAR(1) から VARCHAR(2) に変換され、CHAR(1) 列の限界キー値が 'A' (X'C1) の場合、VARCHAR(2) 列の限界キー値は、'A ' (表のエンコード・スキームが EBCDIC の場合は X'C140、表のエンコード・スキームが UNICODE または ASCII の場合は X'C120) です。

    文字データ・タイプのパーティション・キー列がより長い文字データ・タイプに変更され、その列の元の文字データ・タイプの限界キー値 (列が NULL 可能な場合、最初の NULL バイトは除く) がすべて X'FF の場合、その列の新しい文字データ・タイプの限界キー値は右側が X'FF で埋められ、変更される表を含む表スペースは REORG ペンディング (REORP) 状況のまま残ります。

    文字データ・タイプのパーティション・キー列がより長い文字データ・タイプに変更され、その列の元の文字データ・タイプの限界キー値 (列が NULL 可能な場合、最初の NULL バイトは除く) がすべて X'00' の場合、その列の新しい文字データ・タイプの限界キー値は右側が X'00' で埋められ、変更される表を含む表スペースは REORG ペンディング (REORP) 状況のまま残ります。

  • 統計。 変更されたすべての列の新しい COLUMN 統計を収集してください。COLCARDF 値が有効な場合でも、HIGH2KEY と LOW2KEY の値が無効であれば、この列に対するすべての SYSCOLSTATS カタログ・エントリーが削除されます。また、この列を含むどの頻度統計またはヒストグラム統計も再度収集する必要があります。
変更の始まりXML 列の変更に関する考慮事項変更の終わり
変更の始まりaltered-data-type が XML である場合、変更される列の古いデータ・タイプも XML である必要があります。
  • 古いデータ・タイプが XML タイプ修飾子を持っておらず、新規データ・タイプは持っている場合は、タイプ修飾子で指定されている XML スキーマに従ってその XML 列のすべての値が有効であることを確認する必要があります。 変更されている列の表スペースは、CHECK ペンディング状況のままです。
  • 古いデータ・タイプが XML タイプ修飾子を持っており、新規データ・タイプはタイプ修飾子を持っていない場合、既存の値を再検証する必要はありません。 表スペースの状態は変更されません。

    古い XML タイプ修飾子で指定されている XML スキーマが新規 XML タイプ修飾子で指定されている XML スキーマのサブセットである場合、既存の値を再検証する必要はありません。XML 表スペースの状態は変更されません。

  • 古い XML タイプ修飾子で指定されている XML スキーマが新規 XML タイプ修飾子で指定されている XML スキーマのサブセットでない場合、変更されている列の XML 表スペースは CHECK ペンディング状況のままになります。
変更の終わり
変更の始まり変更後に行うポイント・イン・タイムへのリカバリー変更の終わり
変更の中には、後続のポイント・イン・タイム・リカバリー要求に影響を及ぼすものがあります。考えられる制約事項、リカバリー状況への影響、およびその他の考慮事項について詳しくは、ポイント・イン・タイム・リカバリーを参照してください。

例えば、ALTER COLUMN 文節または ROTATE PARTITION 文節を含む ALTER TABLE ステートメントの場合、後続のポイント・イン・タイム・リカバリー要求に、いくつかの考慮事項や制約事項が適用されることがあります。

ADD、ALTER、および RENAME 文節内の列の参照:
1 つの ALTER TABLE ステートメントの ADD COLUMN 文節、ALTER COLUMN 文節、または RENAME COLUMN 文節内で、列は 1 回だけ参照できます。ただし、同じ ALTER TABLE ステートメント内で制約を追加またはドロップする場合は、同じ列を複数回参照できます。

特殊タイプはそのソース・タイプと同じ制限を受けるので、LOB 列、ROWID 列、および DECFLOAT 列に適用されるすべての構文規則は、LOB、行 ID、および DECFLOAT に基づく特殊タイプ列にも適用されます。 例えば、明示的に作成された ROWID 列が表にある場合、 ソースが行 ID である特殊タイプを指定した列を追加することはできません。

表 T に列を追加しても、T の記述が変わるだけです。T のカタログ記述を使って表 T' を作成し、DSN1COPY などの 機能を使って T を T' に実際にコピーした場合、 T' 内の追加された列を参照する照会は、 データがその記述と一致しないために失敗します。 このような問題を回避するには、コピーを作成する前に、T の 表スペースに対して REORG ユーティリティーを実行してください。

クローン表上での制約事項:
クローン関係に組み込まれた表 (基本表とその関連のクローン表) には以下の制約事項があります。
  • クローン表では RUNSTATS ユーティリティーを実行できません。
  • 変更の始まりクローン関係に関与するオブジェクトは、REORG ユーティリティーの実行時に FASTSWITCH データ・セット切り替え方式を使用せず、SWITCH フェーズは通常どおりに行われます。 これは、LOB XML オブジェクトだけでなく、基本表とクローン表のオブジェクト (データと索引) の両方を含みます。また、REORG ユーティリティー制御ステートメントで CLONE と共に FASTSWITCH YES を指定することはできません。変更の終わり
  • パーティション化された表に対して、クローン表作成時に「I」と「J」のデータ・セットの混在が存在する場合、この「I」と「J」のデータ・セットの混在は、クローン表を最初にドロップすることによってのみ変更可能です。
  • カタログ表とディレクトリー表はクローン表を保有できません。
  • 索引をクローン表上に作成できません。クローン関係に組み込まれた基本表に索引を作成する場合、そのクローン表上の索引は暗黙的に作成されることになり、再ビルド・ペンディング状況になります。
  • 変更の始まり基本表の暗黙的に作成された補助表スペース (LOB 列と XML 列の表スペース) と補助索引は、常に DEFINE YES として作成されます。変更の終わり
  • BEFORE トリガーをクローン表上に作成できません。基本表上に作成された BEFORE トリガー は、基本表とクローン表の両方に適用されます。
  • クローンを持つ基本表は名前変更できず、クローン表を名前変更できません。
  • リアルタイム統計表は、クローン表を保有できません。
  • クローン関係に組み込まれたオブジェクトの補助表と補助索引をドロップできません。

その表がクローン関係に組み込まれている場合、他の表の変更が起こる可能性はありません。表の変更が必要な場合、そのクローン表オブジェクトは、基本表オブジェクト属性が変更されるように、ドロップする必要があります。表と索引の変更などが完了したら、クローン表オブジェクトを再作成できます。

変更の始まり表のオブジェクト記述子に関するサイズ制限:変更の終わり
変更の始まりALTER TABLE ステートメントの結果として、30,000 バイト超のバージョン管理されたオブジェクト記述子が追加 (または更新) されるとき、以下の場合にはエラーが返される可能性があります。
  • ALTER TABLE ステートメントの結果、表に最初のバージョンのオブジェクト記述子が生成される場合。
  • ALTER TABLE ステートメントの結果、表に定義された 1 つ以上の索引に対して最初のバージョンのオブジェクト記述子が生成される場合。
  • バージョン管理された表の既存の 10 進数列に ALTER TABLE ALTER COLUMN SET DATA TYPE ステートメントがある場合。

表のオブジェクト記述子が 30,000 バイトを超える場合、表を除去して再作成しなければならない場合があります。あるいは、ALTER TABLE ALTER COLUMN SET DEFAULT ステートメントを発行して、表内の可変長列のデフォルト値のサイズを小さくすることによって、表のオブジェクト記述子のサイズを小さくすることができます。また、不要な列のデフォルトをドロップして、表のオブジェクト記述子のサイズを小さくすることもできます。

変更の終わり
既存 ID 列の属性の変更:
ID 列の既存値は、ALTER TABLE ステートメントの影響を受けません。変更された ID 列の属性は、ALTER ステートメントの実行後に生成される値に影響します。DB2 は、既存の ID 列の値を新しい ID 列の属性と突き合わせて検証しません。例えば、昇順の ID 列が変更されて降順の ID 列になった場合は、NO CYCLE が有効であっても重複値が生成される可能性があります。

キャッシュ内でまだ使用されていない既存値は、失われることがあります。 また、ALTER ステートメントがエラーを戻した場合やロールバックした場合にも、キャッシュ内の値が失われる可能性があります。

オブジェクトに保留定義変更がある場合の制約事項:
表を含む表スペースまたはこの表スペース内の任意のオブジェクトに保留定義変更がある場合、ALTER TABLE は許可されません。
LOB 列の追加:
表を含む表スペースが暗黙的に作成され、その表に LOB 列を追加すると、以下のオブジェクトが暗黙的に作成されます。
  • LOB 表スペース
  • 補助表
  • 補助索引

変更の始まり基本表がクローン関係に組み込まれている場合、暗黙的に作成される LOB 表スペースと暗黙的に作成される索引は、常に DEFINE YES 属性を使用して作成されます。変更の終わり

ROWID 列の追加:
既存の表に ROWID 列を追加する場合、DB2 は、1 つの行に関して、アクセス時には常に同じ固有の行 ID 値を必ず戻すようにします。表に暗黙的に隠された ROWID 列が既に存在する場合にも、DB2 は 2 つの ROWID 列が同一であることを保証します。

表を含む表スペースが暗黙的に作成され、GENERATED BY DEFAULT として定義された ROWID 列をその表に追加すると、暗黙的に作成された ROWID に対して索引が強制されます。表に暗黙的に隠された ROWID 列が既にあり、追加する ROWID が GENERATED BY DEFAULT として定義されている場合、DB2 は、暗黙的に隠された ROWID 列を変更して GENERATED BY DEFAULT 属性をもつようにし、強制する索引をその ROWID 列に対して暗黙的に作成しないようにします。

GENERATED BY DEFAULT として定義された ROWID 列を追加し、その ROWID が暗黙的に作成される場合、その特権セットで必要となるのは、その表上での INDEX 特権であり、バッファー・プールとストレージ・グループ上での USE 特権です。暗黙的に作成された ROWID 索引はその表の所有者が所有します。

表スペースの再編成によって、ROWID 列の値は 影響を受けません。

ID 列の追加:
空でない表に ID 列を追加するときに、DB2 はその表を含む表スペースを REORG ペンディング状態にします。その後で REORG ユーティリティーを実行するときに、DB2 は既存のすべての行の ID 列に値を生成してから、REORG ペンディング状況を除去します。 これらの値は固有であることが保証され、その順序はシステムが決めたものです。
行変更タイム・スタンプ列の追加:

既存の表に行変更タイム・スタンプ列を追加する場合、既存の行の初期値は ALTER ステートメントの実行時には格納されません。DB2 は、その表スペースを通告 REORG ペンディング状態にします。既存の行の行変更タイム・スタンプ列値について、LRSN または RBA は暗黙の ROW CHANGE TIMESTAMP 式を導き出します。ページ上の行が更新または変更されると、 暗黙の ROW CHANGE TIMESTAMP 式が変更されます。その後で REORG ユーティリティーを実行するときに、DB2 は既存のすべての行の行変更タイム・スタンプ列に値を生成してから、REORG ペンディング状況を除去します。 これらの値は、その行が更新されるまで変わりません。

変更の始まり XML 列追加時の XML バージョン・サポート:変更の終わり
変更の始まりユニバーサル表スペースにはない表に XML 列が追加される場合、その XML 列と関連 XML 表は、その表における最初の XML 列であるか、その表のその他のすべての XML 列が XML バージョンをサポートしていれば、XML バージョンをサポートします。同様に、クローン表が基本表に関連付けられている場合、基本表内の既存の XML 列が XML バージョンをサポートしていれば、任意の XML 列および関連 XML 表は XML バージョンをサポートします。変更の終わり
ビューに列を追加する影響:
表に列を追加しても、既存のビューへの影響はありません。
暗黙的な非表示列に関する考慮事項:
暗黙的に隠されたものとして定義された列は、ALTER ステートメントで明示的に参照できます。例えば、暗黙的に隠された列は、参照制約またはチェック制約の一部として、あるいはマテリアライズ照会表定義として指定できます。
列の追加または変更のカスケード効果:
表に列を追加しても、その表を参照するビューへのカスケード効果はありません。例えば、表に列を追加しても、従属するビューに列は追加されません (これらのビューが SELECT 文節を指定して作成された場合でも)。 ただし、列を変更すると、他のカスケード効果が起こる可能性があります。次の表は、列のデータ・タイプ、精度、位取り、または長さの変更に伴うカスケード効果の一覧です。
表 6. 列のデータ・タイプ、精度、位取り、または長さの変更に伴うカスケード効果
操作 影響
ビューによって参照されている列の変更 列のデータ・タイプ、長さ、精度、または位取りを変更すると、変更される表に従属するビューすべてが、変更時に新しい列属性を使用して再評価されます。 ビューの再生成プロセス中にエラーが発生すると、ALTER TABLE ステートメントは失敗します。それぞれの従属ビューの新しい内部構造は変更時に保管されず、その後で従属ビューが参照されるとビューがまた再生成されます。ALTER VIEW ステートメントを使用して従属ビューを再生成し、新しい内部構造を保管してください。
索引またはユニーク制約 (ユニーク・キーまたは主キー) のキーの中で参照されている列の変更 変更は可能ですが、小数部のある DECIMAL を浮動小数点値に変換する場合は除きます。この場合、精度が失われることによって固有性が失われる可能性があります。数値データ・タイプの変換の場合、索引は再ビルド・ペンディング状況になります。文字データ・タイプの変換の場合、索引キー列は最初の書き込みアクセス時に変換され、索引は再ビルド・ペンディング状況になりません。
パッケージの中で参照されている列の変更 変更は可能です。変更される列がある表に従属するすべてのパッケージが無効になります。
ユーザー定義関数またはプロシージャーの本体内で参照されている列の変更 変更は可能です。関数またはプロシージャーに関連したパッケージがある場合、そのパッケージは無効になります。
ユーザー定義関数またはプロシージャーのパラメーター内で参照されている列の変更 変更は可能です。既存の関数またはプロシージャーの属性は変更されません。列の新しい定義にアクセスするには、関数またはプロシージャーをドロップして再作成する必要があります。

変更の始まり関数が SQL 表関数の場合、関数は、変更時に新しい列属性で再評価されます。再評価プロセス中にエラーが発生すると、ALTER TABLE ステートメントは失敗します。変更の終わり

トリガーによって参照されている列の変更

変更は可能です。

その列の表に従属するトリガー・パッケージはすべて無効になります。
変更の始まり行の許可または列マスクの中で参照されている列の変更変更の終わり 変更の始まり変更は可能です。

変更の始まり列のデータ・タイプ、精度、位取り、または長さを変更すると、その表に定義されている行の許可または列マスクに影響を与えることがあります。列のデータ・タイプ、長さ、精度、または位取りを変更する際に、その列に列マスクが定義されているか、あるいは行の許可または列マスクがこの列を参照する場合、この行の許可および列マスクは、この列の新しい列属性を使用して再評価されます。再評価処理時にエラーが検出されると、ALTER ステートメントからエラーが戻されます。変更の終わり

変更の始まり行の許可または列マスクの再評価時に、この行の許可または列マスクの定義で参照されるユーザー定義関数は、この行の許可または列マスクの作成時に解決されたのと同じ関数に解決される必要があります。変更の終わり

変更の終わり

変更対象の列が索引の一部である場合、例外状態がその索引に対して設定される可能性があります。 考えられる設定を表 7 に示します。

表 7. 列が索引の中にある場合、ALTER COLUMN に対する通知設定
変更のタイプ 索引の例外状態
VARCHAR から
CHAR へ
変更の始まり
  • NOT PADDED 索引の場合: PSRBD と AREO*、または RBDP と AREO*1
  • PADDED 索引の場合: AREO*
変更の終わり
VARGRAPHIC から GRAPHIC へ 変更の始まり
  • NOT PADDED 索引の場合: PSRBD と AREO*、または RBDP と AREO*1
  • PADDED 索引の場合: AREO*
変更の終わり
CHAR から
VARCHAR へ
AREO*
GRAPHIC から VARGRAPHIC へ AREO*
VARCHAR から VARCHAR へ AREO* (PADDED 索引の場合のみ)
VARGRAPHIC から VARGRAPHIC へ AREO* (PADDED 索引の場合のみ)
CHAR から CHAR へ AREO*
変更の始まりCHAR FOR BIT DATA または VARCHAR FOR BIT DATA から BINARY または VARBINARY へ変更の終わり 変更の始まりRBDP または PSRBD1変更の終わり
GRAPHIC から GRAPHIC へ AREO*
変更の始まり変更された数値列変更の終わり 変更の始まりRBDP または PSRBD1変更の終わり
変更の始まりTIMESTAMP WITHOUT TIME ZONE から TIMESTAMP WITHOUT TIME ZONE変更の終わり 変更の始まりAREO*変更の終わり
変更の始まりTIMESTAMP WITH TIME ZONE から TIMESTAMP WITH TIME ZONE変更の終わり 変更の始まりAREO*変更の終わり
注:
  1. 非パーティション化表の索引またはパーティション化表のパーティション化索引は、RBDP 状況に設定されます。非パーティション化表の非パーティション化索引は、PSRBD 状況に設定されます。

スキーマ変更後の通知または制約の例外状態のリセットについては、表スペースの再編成を参照してください。

パーティションの追加:
表にパーティションを追加する際に、最終パーティションの境界がまだ適用されていない場合は、パーティションの追加後に適用され、最後の 2 つの論理パーティションが REORG ペンディング (REORP) 状況になります。新しいものを追加する前に最終パーティションが REORG ペンディング状況になっていた場合は、追加したパーティションも REORG ペンディング状況になります。
変更の始まり増加対応パーティション表スペース内にあり、LOB 列を持つ表のパーティションの追加:変更の終わり
変更の始まりLOB 列を持つ表が増加対応パーティション表スペース内にある場合は、以下のように、SQLRULES に対して有効な値に応じて、基本表の作成時に、関連する LOB 表スペースを明示的または暗黙的に作成することができます。
  • SQLRULES = STD の場合、LOB 表スペースは、最初のパーティションに対して、または NUMPARTS 文節のパーティションの数 (CREATE TABLESPACE ステートメントに指定されている場合) に応じて暗黙的に作成されます。
  • SQLRULES = DB2 の場合、LOB 表スペースが最初のパーティションに対して、または NUMPARTS 文節のパーティションの数 (CREATE TABLESPACE ステートメントに指定されている場合) に応じて明示的に作成されるまで、表定義は不完全のままです。この場合、最初の SQL データ変更ステートメントが表に対して機能する前に LOB 表スペースが作成されないと、増加対応パーティション表スペースにある表の定義は不完全な状態のままになります。表は、SQL や LOAD を使用して更新することはできません。
変更の終わり
変更の始まりLOB 表スペースが暗黙的に作成されるときに前の LOB 表スペース・パーティションから継承される属性:変更の終わり
変更の始まり暗黙的に作成された LOB 表スペースに以下の属性が適用されます。
  • BUFFERPOOL
  • DATASET
  • ERASERULE
  • GBPCACHE
  • LOCKMAX
  • LOG
  • CLOSE
  • DSSIZE
  • LOCKSIZE
変更の終わり
新しく追加されたパーティションの行形式:
RRF サブシステム・パラメーターの値が ENABLE である場合、ADD PARTITION 文節を使用して作成される新しい追加パーティション (または表スペースが増加対応パーティション表スペースであるために追加されるパーティション) は、再配列行形式で作成されます。RRF サブシステム・パラメーターの値が DISABLE である場合、以下の表スペースを除き、新しく追加されるパーティションは基本行形式で作成されます。
  • 既に基本行形式を使用しており、編集プロシージャーがある表を含む表スペースの場合、新しく作成されるパーティションは、RRF パラメーターの値に関係なく、常に基本行形式になります。
  • 既に再配列行形式を使用しており、編集プロシージャーがある表を含む表スペースの場合、新しく作成されるパーティションは、RRF パラメーターの値に関係なく、常に再配列行形式になります。
  • XML 表スペースの新しく作成されるパーティションは常に再配列形式になります。
先頭から最終へのパーティションの循環:
ALTER TABLE を実行して先頭の論理パーティションを最終の論理パーティションに循環させると、非常に時間がかかる可能性があります。リセット操作時には、パーティションからすべての行が削除されます。また、削除された行のキーもすべての非パーティション化索引から削除されますが、このためにはそれぞれの非パーティション化索引のスキャンが必要です。

パーティションを循環させる際に、最終パーティションの境界がまだ適用されていない場合は、ROTATE FIRST TO LAST の発行後に適用され、最後の 2 つの論理パーティションが REORG ペンディング (REORP) 状況になります。ROTATE FIRST TO LAST の発行前に最終パーティションが REORG ペンディング状況になっていた場合は、最後の 2 つの論理パーティションが REORG ペンディング状況になります。

アプリケーションに対する変更の影響:
表内の列の変更に対応して、アプリケーションの変更が必要になることがあります。例えば、列の長さを増やした場合は、その列をフェッチする変数の長さを増やす必要があります。列のデータ・タイプを変更した場合は、パフォーマンスの低下を防ぐために、対応する変数のデータ・タイプも変更する必要が生じることがあります。

列を名前変更した場合は、その列へのすべての参照を変更して、予期しない結果とならないようにする必要があります。

パッケージの無効化:
このステートメントは、ターゲット・オブジェクトに依存するすべてのパッケージを無効にすることがあります。また、指定された文節やキーワード、およびその他の要因によっては、カスケード効果により、他の関連オブジェクトに依存するすべてのパッケージを無効にすることがあります。 パッケージを無効化する変更を参照してください。
制約とチェック・ペンディング状況の除去:
表スペースまたはパーティションに、制約に違反する行がある表が含まれているためにチェック・ペンディング状況になっている場合、制約を除去するとチェック・ペンディング状況から開放されます。
マテリアライズ照会表の変更:
ALTER TABLE ステートメントを使用して、現行サーバーに既に存在する表をマテリアライズ照会表として登録したり、既存のマテリアライズ照会表の属性を変更したり、既存のマテリアライズ照会表を基本表に変更したりできます。

基本表が ALTER TABLE ステートメントによって最初に変更されてマテリアライズ照会表になったときの分離レベルが、マテリアライズ照会表の分離レベルです。

照会の最適化を使用可能に設定して表をマテリアライズ照会表に変更すると、 その表は即時に照会の再書き込みに適格と見なされて使用されます。 このため、表のデータの正確性に注意してください。必要な場合は、照会の最適化を使用不可に設定して表をマテリアライズ照会表に変更し、その後で表をリフレッシュして、照会の最適化を使用可能に設定してください。

基本表をマテリアライズ照会表に変更する場合、またはユーザー管理の照会表をシステム管理の照会表に変更する場合は、SYSIBM.SYSVIEWS 内でその表に対応する行の REFRESH_TIME 列に、現在のタイム・スタンプが格納されます。システム管理のマテリアライズ照会表をユーザー管理のマテリアライズ照会表に変更する場合、SYSIBM.SYSVIEWS 内でその表に対応する行の REFRESH_TIME 列は変更されません。

システム管理の照会表に対しては LOAD ユーティリティーを使用できませんが、ユーザー管理のマテリアライズ照会表に対しては使用できます。

表の変更中にユーティリティーを実行する場合の考慮事項:
ユーティリティーが、表を含んでいる表スペースの制御権を持っている間は、ALTER TABLE ステートメントを実行することはできません。
フィールド・プロシージャー、編集プロシージャー、および妥当性検査出口プロシージャーに関する制約事項:
フィールド・プロシージャー、WITH ROW ATTRIBUTES として定義されている編集プロシージャー、および妥当性検査出口プロシージャーは、18 バイト (EBCDIC) よりも長い列名が付いた表では使用できません。フィールド・プロシージャーまたは妥当性検査出口プロシージャーを保有する表が存在し、かつ、その列名が 18 バイトよりも長い列を追加すると、その表に対するフィールド・プロシージャーと妥当性検査出口プロシージャーは無効化されることになります。

18 バイト (EBCDIC) よりも長い列名が付いた表では、トリガーの使用を検討して、フィールド・プロシージャー、WITH ROW ATTRIBUTES として定義されている編集プロシージャー、および妥当性検査出口プロシージャーに関する機能を置き換えます。

ALTER TABLE と同じコミット有効範囲内での SQL データ変更ステートメントに関する制約:
ある索引に影響する SQL データ変更ステートメントは、その索引に影響する ALTER TABLE と同じコミット有効範囲内では実行できません。
DATA CAPTURE CHANGES に関する制約事項:
テーブルの状態が REORG ペンディング通知の場合、DATA CAPTURE CHANGES 文節を使用した表を変更できません。
DB2 カタログに対する変更点の収集:
データ収集用の情報により増大した DB2 カタログ表に対する変更点を記録しておくには、ALTER TABLE xxx DATA CAPTURE CHANGES (ここで、xxx はカタログ表の名前 (SYSIBM.xxx) です) を指定します。カタログ表の変更に関するデータ収集によって、 カタログのシャドーを作成し管理することができます。
変更の始まり表のハッシュ編成に対する変更が発生する場合:変更の終わり
変更の始まりハッシュ編成を使用する表の変更は、ユニーク・ハッシュ・キーの施行に関しては即時に有効になります。一方、表スペースの物理編成がハッシュ編成に変換されるのは、REORG 後です。

範囲パーティション化ユニバーサル表スペースで、個々のパーティションを変更して HASH SPACE を指定する場合、新規ハッシュ・スペース値は、個々のパーティションに対して REORG ユーティリティーが実行された後で有効になります。

変更の終わり
変更の始まりハッシュ編成を使用する表に対するバッファー・プール、DSSIZE、および MAXPARTITIONS の考慮事項:変更の終わり
変更の始まりDB2 では、表の定義に基づいてハッシュ編成の最適バッファー・プール・サイズを計算し、明示的に作成された表スペースのバッファー・プールを使用して、この計算によるバッファー・プール・サイズを検証します。バッファー・プール・サイズが異なっていると、DB2 はエラーを戻します。

範囲パーティション化ユニバーサル表スペースにある表の場合は、表スペースの DSSIZE 値が、各パーティションの HASH SPACE 指定に対応するのに十分な大きさである必要があります。

増加対応パーティション表スペースにある表の場合は、表スペースの DSSIZE 値および MAXPARTITIONS 値から計算された合計スペースが、明示的または暗黙的に指定された HASH SPACE に対して十分大きい必要があります。

変更の終わり
変更の始まりハッシュ・スペース値の変更:変更の終わり
変更の始まり範囲パーティション化ユニバーサル表スペースの全パーティションの HASH SPACE 値を変更するか、増加対応パーティション表スペースの合計 HASH SPACE を変更するには、ALTER ORGANIZATION SET HASH SPACE (integer) 文節を使用します。範囲パーティション化ユニバーサル表スペースの複数のパーティションを対象に HASH SPACE 値を変更する一方で、すべてのパーティションが対象ではない場合は、パーティションごとに個別の ALTER TABLE ステートメントを指定し、ALTER PARTITION (integer) 文節および HASH SPACE (integer) 文節を指定する必要があります。変更の終わり
変更の始まりハッシュ・スペースおよび DB2 ページ・サイズ:変更の終わり
変更の始まり指定したハッシュ・スペースが 64 MB (DB2 のデフォルト) 以下である場合、DB2 では、DB2 システム・ページ用の追加のスペースを追加します。指定したハッシュ・スペースが 64 MB を超える場合、DB2 では、ハッシュ・スペースの一部を DB2 システム・ページ用に使用します。DB2 システム・ページ用に必要なスペースの量は、SEGSIZE と PAGESIZE によって異なります。SEGSIZE や PAGESIZE が大きいほど、DB2 システム・ページの所要量が大きくなります。 DB2 では、最大の SEGSIZE 値 (64) および PAGESIZE 値 (32K) に対応して、5 MB までをシステム・ページ用に予約できます。変更の終わり
変更の始まりハッシュ・スペースおよび DSSIZE:変更の終わり
変更の始まり特定の表スペース特性に応じて、DB2 はハッシュ・オーバーフロー域用のスペースを予約する必要があります。したがって、ハッシュ・スペースの量を DSSIZE 値と同じにすることはできません。指定できるハッシュ・スペースの最大量は、DSSIZE 値より約 20% 少なくなります。ハッシュ・スペースの量が多すぎると、DB2 はエラーを返します。ハッシュ・スペースの量が多すぎる場合、DSSIZE の値を大きくするか、またはハッシュ・スペースの量を減らしてください。変更の終わり
変更の始まりハッシュ編成を使用する表に対する APPEND の指定:変更の終わり
変更の始まり追加処理は、ハッシュ編成を使用する表には適用できません。これは、 ハッシュ編成にはキー・クラスタリングが存在しないためです。ハッシュ編成を使用する表に 対する挿入操作の場合、DB2 では、内部ハッシュ・アルゴリズムを使用して 行の場所を決定します。変更の終わり
変更の始まりハッシュ編成を使用する表に関する制約事項:変更の終わり
変更の始まりハッシュ編成を使用する表は以下の制約事項の対象になります。
  • 表でハッシュ編成を既に使用している場合、DB2 はエラーを戻します。
  • ハッシュ編成を使用するように定義される表は、LOB 表スペースにも XML 表スペースにも作成できません。
  • ハッシュ・キーに指定されている列のデータ・タイプは変更できません。
  • ALTER ADD HASH ORGANIZATION 文節または ALTER DROP ORGANIZATION 文節を使用して表が変更された後では、パーティション・レベルの REORG は許可されません。
  • MAXROWS 文節は、ハッシュ編成を使用する表の表スペースのハッシュ・オーバーフロー域に対してのみ適用できます。各ページの固定ハッシュ域は、保持できる限りの数の行を含み、最大 255 行です。
  • DB2 では、表にハッシュ編成が追加されるときに、ハッシュ・オーバーフロー索引を暗黙的に作成します。このハッシュ・オーバーフロー索引は、REORG ユーティリティーが実行されるまで、再ビルド・ペンディング状態です。
変更の終わり
変更の始まり明示的に活動化される行アクセス制御:変更の終わり
変更の始まりACTIVATE ROW ACCESS CONTROL 文節は、表の行アクセス制御を活動化する場合に使用します。活動化されると、表のデフォルトの行の許可が暗黙的に作成され、表のどの行にもアクセスできなくなります。ただし、許可の定義で指定された許可 ID またはロールのアクセス権限を提供する別の行の許可が、後で使用可能になり、存在する場合を除きます。デフォルトの行の許可は、常に使用可能です。

表がデータ操作ステートメントで参照される場合、その表に作成されていたすべての使用可能な行の許可 (デフォルトの行の許可を含む) は、表のどの行をアクセス可能とするかを制御するために、DB2 によって暗黙的に適用されます。行アクセス制御検索条件は、使用可能なそれぞれの行の許可で検索条件に論理 OR 演算子を適用することによって派生されます。この派生された検索条件は、述部、グループ化、順序付けなどのユーザー指定の操作が処理される前に、表に対するフィルターとして動作します。この派生された検索条件によって、許可定義に指定された許可 ID またはロールが表の特定の行にアクセスできるようになります。 使用可能な行の許可を適用することによるフェッチ操作への影響の詳細については、副選択の説明を参照してください。使用可能な行の許可を適用することによるデータ変更操作への影響の詳細については、データ変更ステートメントを参照してください。

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

変更の終わり
変更の始まり表の行アクセス制御が活動化されるときに作成される暗黙オブジェクト:変更の終わり
変更の始まりACTIVATE ROW ACCESS CONTROL 文節を使用して表の行アクセス制御を活動化すると、DB2 は、表のデフォルトの行の許可を暗黙的に作成します。デフォルトの行の許可では、表に対するすべてのアクセスができなくなります。暗黙的に作成される行の許可は、基本表と同じスキーマに含まれ、名前は最大 128 UTF-8 バイトで、形式は SYS_DEFAULT_ROW_PERMISSION__table-name ... です。"PERMISSION" の後の 2 つのアンダースコアーに注意してください。 この名前が固有でない場合、最後の 4 バイトは固有番号 'nnnn' 用に予約されます。ここで、'nnnn' は '0000' から始まる 4 文字の英数字で、固有名が見つかるまで 1 ずつ増分します。デフォルトの行の許可の所有者は SYSIBM です。

デフォルトの行の許可は、常に使用可能です。

行アクセス制御が非活動化されるか、または表がドロップされると、デフォルトの行の許可はドロップされます。

変更の終わり
変更の始まり列アクセス制御の活動化:変更の終わり
変更の始まりACTIVATE COLUMN ACCESS CONTROL 文節は、表の列アクセス制御を活動化する場合に使用します。表に対するアクセスは制限されませんが、データ操作ステートメントでこの表が参照される場合は、この表に対して作成されている使用可能なすべての列マスクが適用され、照会の最終結果表で参照される列値のマスクや、データ変更ステートメントで使用される新しい値の判別が行われます。

列マスクを使用して列値をマスクする場合は、最終結果表内の値が判別されます。 列に列マスクがあり、列 (列名の単純参照または式に組み込み) が最外部の選択リストに表示される場合、列マスクはこの列に適用され、最終結果表の値を生成します。列が、最外部の選択リストに表示されないが最終結果表に関係している場合 (例えば、マテリアライズ表式またはビューには表示される)、列マスクは列に適用され、マスク値をマテリアライズ表式またはビューの結果表に組み込んで最終結果表で使用できるようにします。

列マスクの適用が WHERE、GROUP BY、HAVING、SELECT DISTINCT、および ORDER BY などのステートメント内の他の文節の操作とは競合することはありません。最終結果表に戻される行は同じままです。ただし、結果の行の値は、列マスクによってマスクされている場合があります。 したがって、マスクされる列が ORDER BY ソート・キーでも使用される場合の順序は元の列値に基づき、最終結果表内のマスク値にはこの順序が反映されない可能性があります。同様に、マスク値は、SELECT DISTINCT によって実施された固有性を反映していない可能性があります。マスクされる列が式に組み込まれていると、列マスクは式の評価が行われる前に列に適用されるため、式の結果が異なる場合があります。 照会の式が、列マスク定義内で列値をマスクするために使用されている式と同じである場合、照会の式の結果は変わらない可能性があります。例えば、照会の式が 'XXX-XX-' || SUBSTR( SSN, 8, 4) で、列マスク定義に同じ式が指定されているとします。この特定の例では、照会の式を列 SSN で置換して、同じ式が 2 回評価されることを回避できます。

以下に、照会の結果の列値をマスクするために DB2 が列マスクを使用するコンテキストを示します。特定の制約事項が、いくつかのコンテキストに適用されることがあります。この制約事項は、分離リストで説明されています。

  • SELECT または SELECT INTO ステートメントの最外部 SELECT 文節、あるいは列は最外部の選択リストに表示されないが最終結果表に関係する場合は、対応するマテリアライズ表式または列が表示されるビューの最外部 SELECT 文節
  • SELECT FROM INSERT、UPDATE、DELETE、または MERGE ステートメントの最外部 SELECT 文節
  • INSERT、UPDATE、MERGE の各ステートメント、または SET transition-variable 代入ステートメントの新しい値の派生に使用される最外部 SELECT 文節
  • セット演算子を使用しないが、上記ステートメント、SET 変数代入ステートメントの右辺、VALUES INTO ステートメント、または VALUES ステートメントの最外部 SELECT 文節で使用されるスカラー全選択式にも、同じことが適用されます。
  • SQL ステートメント、またはネイティブ SQL プロシージャーやコンパイル済みのユーザー定義 SQL スカラー関数に示される割り当てステートメントなどの等価のステートメントにも、同じことが適用されます。

上記コンテキストで CASE 式が使用される場合、列マスクは、WHEN 文節の検索条件には適用されません。

列マスクはスタンドアロン・オブジェクトとして作成されますが、これが使用される可能性があるコンテキストのすべてが認識されるわけではありません。最終結果表内の列値をマスクするために、列マスク定義は DB2 によってステートメントにマージされます。列マスク定義は、ステートメントのコンテキストに取り込まれると、ステートメント内の特定の SQL セマンティクスと競合することがあります。したがって、状態によっては、ステートメントと列マスクの適用とを組み合わせることによりエラーが戻されることがあります。 以下に、エラーが戻される可能性のある状態を説明します。

  1. 変更の始まり列マスクは、セット演算の最終結果表を派生させる選択リスト内の列には適用できません。これは、最終結果表の派生に使用されるセット演算子の 1 つが UNION ALL、UNION DISTINCT、EXCEPT ALL、EXCEPT DISTINCT、INTERSECT ALL、または INTERSECT DISTINCT であるためです。変更の終わり

    変更の始まり最終結果表の行は、セット演算子によって結合された複数の結果表 (R1 と R2) から派生されます。DB2 は、どの結果表 (R1 または R2) からどの行が派生されるかは保証しません。したがって、列マスクは適用されるものの、一方の結果表 (R1) には列マスクがあり、他方の結果表 (R2) には列マスクがないか別の列マスクがある場合、最終結果表の行は派生されるごとに異なることがあります。DB2 は、最終結果表の行の列に同じ列マスクがあるかどうかを確認せずに、バインド時エラーを戻します。変更の終わり

  2. 変更の始まりスカラー全選択式の結果がセット演算子から派生される場合、列マスクは、スカラー全選択式の選択リスト内の列に適用できません。つまり、列マスクが適用されるのは、スカラー副選択式のみです。変更の終わり
  3. 副選択に GROUP BY 文節が含まれている場合、以下のすべての条件が満たされないと、列マスクは対応する選択リスト内の列に適用できません。
    • 列は、GROUP BY 文節内の column-name を示している必要がありますが、GROUP BY 文節内の式で参照されていてはなりません。さらに、その列マスク定義が次の条件を満たしている必要があります。
      • 列マスクの適用先の列の同じ表からの列マスク定義で参照される列は、GROUP BY 文節内の列名を示していなければならない
      • 列マスクが GROUP BY 文節内の式で参照されていてはならない
    • 列は集約関数で指定され、その列マスク定義は以下の条件を満たす必要があります。
      • 列マスク定義でスカラー全選択が参照されていてはならない
      • 列マスク定義で集約関数が参照されていてはならない
  4. 副選択に GROUP BY 文節が含まれていて、対応する選択リスト内の列が、マテリアライズ表式またはビューの列名または式に直接的または間接的にマップしている場合、GROUP BY が指定されている副選択の列は、集約関数で指定されている必要があります。
  5. 副選択に GROUP BY 文節が含まれておらず、対応する選択リスト内の列が集約関数で指定されているとき、列マスク定義で以下が参照されている場合、列マスクは適用できません。
    • スカラー全選択
    • 集約関数
  6. 副選択の FROM 文節で再帰的共通表式を参照し、最終結果表の派生に再帰的共通表式の結果を使用する場合、列マスクは、再帰的共通表式の全選択で参照される列には適用できません。
  7. 副選択の FROM 文節に data-change-table-reference が含まれていて、INCLUDE 文節が SQL データ変更ステートメントの一部として指定されている場合、列マスクは、最外部選択リスト内の追加列の値の派生に使用する列には適用できません。
  8. 副選択の FROM 文節で外部表のユーザー定義関数または SQL 表のユーザー定義関数を参照し、最終結果表の派生にこの関数の結果を使用する場合、列マスクは、この関数の引数である列には適用できません。
  9. 最終結果表を派生させる選択リストで OLAP 指定が参照されている場合、列マスクは、OLAP 指定のパーティション式またはソート・キー式で参照される列には適用できません。
  10. ユーザー定義関数が NOT SECURED オプションで定義されている場合、この関数の引数は、列マスクが使用可能にされ、かつその表の列アクセス制御が活動化される列を参照していてはなりません。この規則は、ステートメントの任意の場所で参照されるユーザー定義関数に適用されます。

バインド時の上記のエラー状態を回避するには、以下のいずれかのアクションを行う必要があります。

  • ステートメントの上記コンテキストを変更するか、ステートメントから削除する
  • 列マスクを使用不可にする
  • 列マスクをドロップし、定義を変更して、列マスクを再作成する
  • 表の列アクセス制御を非活動化する

その他の状態の場合、ステートメントに SELECT DISTINCT が含まれていて、SELECT DISTINCT の結果を直接的または間接的に派生させる列に列マスクが適用される場合、ステートメントから非 deterministic の結果が戻されることがあります。以下の例で、このような結果が戻される可能性のある状態を示します。

  1. 列マスク定義で、列マスクの適用先の列の表にある他の列を参照する場合、SELECT DISTINCT の結果は deterministic であってはなりません。
  2. 列が組み込みスカラー関数 (COALESCE、IFNULL、NULLIF、MAX、 MIN、LOCATE、TOTALORDER など) の引数で参照される場合、SELECT DISTINCT の結果は deterministic とならない可能性があります。
  3. 列が集約関数の引数で参照される場合、SELECT DISTINCT の結果は deterministic とならない可能性があります。DISTINCT が指定されている場合、関数の引数は、列マスクのある列を参照できません。
  4. 列が式に組み込まれ、その式に非 deterministic 関数かまたは外部アクションのある関数が含まれている場合、SELECT DISTINCT の結果は deterministic とならない可能性があります。

列が NULL 可能でない場合、その列マスク定義では、その列には NULL 値を考慮しない可能性が高くなります。ターゲット表の列アクセス制御が活動化された後、ターゲット表が外部結合操作で NULL が埋められた表となる場合、最終結果表の列値は NULL となる可能性があります。

INSERT、UPDATE、MERGE、または SET 遷移変数代入ステートメントの新規の値を派生させるために列が使用される場合は、マスク値でなく、オリジナルの列値が使用されます。列に列マスクがあると、この列マスクが適用され、実行時のアクセス制御規則の評価によって、列が定数でも式でもなく確実にそれ自体に対してマスクされます。これによって、マスク値がオリジナルの列値と必ず同じになります。 列マスクによって列がそれ自体に対してマスクされない場合、既存の行が更新されないか、新規行が挿入されず、実行時にエラーが戻されます。 新規の値を派生させるために列マスクの適用に使用される規則は、照会の最終結果表について前述したのと同じ規則に従います。列マスクを挿入可能性および更新可能性に影響するよう使用する方法については、データ変更ステートメントを参照してください。

列マスクを適用できるのは、基本表の列のみです。マテリアライズ表式、マテリアライズされたビュー、または共通表式列が最終結果表に関係している場合、上記のエラー状態が、マテリアライズ表式、マテリアライズされたビュー、または共通表式定義で発生することがあります。

列アクセス制御は、XMLTABLE 組み込み関数には影響を与えません。XMLTABLE 関数の入力が、列マスクのある列の場合、列マスクは適用されません。

列アクセス制御は、DEACTIVATE COLUMN ACCESS CONTROL 文節を使用して列アクセス制御の実施を停止するまで実施されます。

変更の終わり
変更の始まり行および列のアクセス制御は、DB2 によって EXPLAIN 表にデータが設定される場合は実施されません。変更の終わり
変更の始まりEXPLAIN 表に対して、行および列のアクセス制御を実施できます。 ただし、使用可能な行の許可および列マスクは、DB2 がこの表に行を挿入するときには適用されません。変更の終わり
変更の始まり行または列のアクセス制御の実施の停止:変更の終わり
変更の始まりDEACTIVATE ROW ACCESS CONTROL 文節は、表の行アクセス制御の実施を停止する場合に使用します。デフォルトの行の許可はドロップされます。停止された後は、データ操作ステートメントで表が参照される場合、明示的に作成された行の許可は適用されません。この表は、付与された特権に基づいてアクセスできます。

DEACTIVATE COLUMN ACCESS CONTROL 文節は、表の列アクセス制御の実施を停止する場合に使用します。停止された後は、データ操作ステートメントで表が参照される場合、列マスクは適用されません。最終結果表には、マスクされない列値が使用されます。

明示的に作成された行の許可または列マスク (ある場合) は、そのままですが有効ではありません。

変更の終わり
変更の始まり行および列のアクセス制御のトリガーの保護:変更の終わり
変更の始まりトリガーはデータベースの保全性のために使用されます。したがって、行および列のアクセス制御 (セキュリティー) とデータベース保全性とのバランスを取る必要があります。使用可能な行の許可および列マスクは、遷移変数および遷移表の初期値には適用されません。 トリガー本体で参照される遷移変数または遷移表に対する、トリガー表に実施された行および列のアクセス制御もまた無視されます。遷移変数および遷移表にある機密データにアクセスするためのトリガー・アクションで、SQL ステートメントのセキュリティー上の懸念がないようにするには、SECURED オプションを使用してトリガーを作成するか変更する必要があります。トリガーがセキュアでない場合、トリガー表に対して行および列のアクセス制御を実施することはできません。変更の終わり
変更の始まり行および列のアクセス制御のユーザー定義関数の保護:変更の終わり
変更の始まり行の許可または列マスク定義でユーザー定義関数を参照する場合は、機密データがこの関数に引数として渡される可能性があるため、SECURED オプションを使用してこの関数を変更する必要があります。

DB2 は SECURED オプションを、ユーザー定義関数に対するすべての変更の変更制御監査プロシージャーをユーザーが確立したことを宣言するアサーションと見なします。また、このような制御監査プロシージャーはユーザー定義関数のすべてのバージョンに適していると想定し、また後続のすべての ALTER FUNCTION ステートメント、または外部パッケージに対する変更は監査プロセスで確認されると想定します。

変更の終わり
変更の始まり行および列のアクセス制御を適用できないデータベース操作:変更の終わり
変更の始まり行および列のアクセス制御によってデータベースの保全性を損なってはなりません。 主キー、固有キー、索引、チェック制約、および参照整合性 (RI) に関係する列は、行および列のアクセス制御の対象であってはなりません。この列に対する列マスクは定義できますが、キーのビルド処理中や、制約または RI の実施中には適用されません。変更の終わり
変更の始まり読み取り専用カーソルと読み取り専用ビュー:変更の終わり
変更の始まり読み取り専用カーソルまたは読み取り専用ビューの判別に使用する規則はバインド時に決定されるため、行および列のアクセス制御の影響は受けません。使用可能な列マスクの適用の影響は、実行時まで不明です。したがって、書き込み可能カーソルまたは書き込み可能ビューに対するデータ変更操作は、実行時に依然として失敗することがあります。変更の終わり
変更の始まりシステム期間テンポラル表への列の追加に関する考慮事項:変更の終わり
変更の始まり
  • 列のデータ・タイプが特殊タイプである場合:
    • 履歴表の所有者に、特殊タイプに対する USAGE 特権が暗黙的または明示的に付与されている必要があります。
    • 特殊タイプが修飾されていない場合、履歴表内にある列の特殊タイプの暗黙スキーマは、システム期間テンポラル表の特殊タイプに対して判別される暗黙スキーマと同じです。
  • 構文 LONG VARCHAR または LONG VARGRAPHIC は、システム期間テンポラル表に列を追加する場合は指定できません。代わりに VARCHAR または VARGRAPHIC を使用してください。
  • 列のデータ・タイプが LOB であり、INLINE LENGTH 文節が指定されていない場合は、DB2 が長さを判別します。システム期間テンポラル表の列に使用される暗黙的なインライン長は、履歴表の対応する列にも使用されます。
  • 列のデータ・タイプが LOB である場合、そのための補助オブジェクトがシステム期間テンポラル表に暗黙的に作成されます。 補助オブジェクトは、履歴表の対応する列に対しても作成されます。
変更の終わり
変更の始まり統計プロファイルの列の名前変更の影響:変更の終わり
変更の始まりRENAME COLUMN を指定して ALTER TABLE を実行すると、その列を参照する統計プロファイルは有効でなくなります。名前変更された列を含むプロファイルを指定して RUNSTATS を実行すると、エラーが発生します。RENAME COLUMN を指定して ALTER TABLE を実行した後、以下のタスクを実行します。
  1. 名前変更された列を参照する統計プロファイルをすべて削除します。
  2. 統計プロファイルを再作成します。
変更の終わり
代替構文およびシノニム:
DB2 の前のリリースや DB2 ファミリーのその他の製品との互換性を保つために、DB2 では以下の文節がサポートされます。
  • NO CACHE のシノニムとして NOCACHE (単一文節)
  • NO CYCLE のシノニムとして NOCYCLE (単一文節)
  • NO MINVALUE のシノニムとして NOMINVALUE (単一文節)
  • NO MAXVALUE のシノニムとして NOMAXVALUE (単一文節)
  • NO ORDER のシノニムとして NOORDER (単一文節)
  • PART integer VALUES は、PARTITION integer ENDING AT の代替として指定できます。
  • ENDING AT のシノニムとして VALUES
  • WITH NO DATA のシノニムとして DEFINITION ONLY
  • DROP MATERIALIZED QUERY のシノニムとして SET MATERIALIZED QUERY AS DEFINITION ONLY
  • DROP MATERIALIZED QUERY のシノニムとして SET SUMMARY AS DEFINITION ONLY
  • ADD MATERIALIZED QUERY (全選択) のシノニムとして SET MATERIALIZED QUERY AS (全選択)
  • ADD MATERIALIZED QUERY (全選択) のシノニムとして SET SUMMARY AS (全選択)
  • 変更の始まりTIMEZONE は、 TIME ZONE の代替として指定できます。変更の終わり

例 1:DSN8A10.DEPT 内の列 DEPTNAME が VARCHAR(36) と して作成されています。 その長さを 50 バイトに増やします。 また、列 BLDG を表 DSN8A10.DEPT に追加します。 新しい列を、SBCS データが入る文字ストリング列として記述します。
   ALTER TABLE DSN8A10.DEPT
     ALTER COLUMN DEPTNAME SET DATA TYPE VARCHAR(50)
     ADD BLDG CHAR(3) FOR SBCS DATA;
例 2: DSN8EAEM という 検証プロシージャーを、表 DSN8A10.EMP に割り当てます。
   ALTER TABLE DSN8A10.EMP
     VALIDPROC DSN8EAEM;
例 3:DSN8A10.EMP から 現行の検証プロシージャーを切り離します。 このステートメントの実行後は、表に検証プロシージャーはなくなります。
   ALTER TABLE DSN8A10.EMP
     VALIDPROC NULL;
例 4: ADMRDEPT を DSN8A10.DEPT の 自己参照制約の外部キーとして定義します。
   ALTER TABLE DSN8A10.DEPT
     FOREIGN KEY(ADMRDEPT) REFERENCES DSN8A10.DEPT ON DELETE CASCADE;
例 5: チェック制約を表 DSN8A10.EMP に追加し、従業員の給与の最低額が $10,000 になっていることを検査します。
   ALTER TABLE DSN8A10.EMP
     ADD CHECK (SALARY >= 10000);
例 6: PRODINFO 表を変更し、製品バージョンの表 (PRODVER_1) 内の主キーでないユニーク・キーを参照する外部キーを定義します。ユニーク・キー の列は VERNAME、RELNO です。
   ALTER TABLE PRODINFO
     FOREIGN KEY (PRODNAME,PRODVERNO)
       REFERENCES PRODVER_1 (VERNAME,RELNO) ON DELETE RESTRICT;
例 7: 表 DEPT が、 列 DEPTNAME に定義されたユニーク索引を持つとします。DEPT 表に、列 DEPTNAME からなる、KEY_DEPTNAME という名前のユニーク・キー制約を追加します。
   ALTER TABLE DSN8A10.DEPT
     ADD CONSTRAINT KEY_DEPTNAME UNIQUE( DEPTNAME );
例 8: 基本表 TRANSCOUNT をマテリアライズ照会表として登録します。全選択の結果は、既存の表にある列と一致する列セットである必要があります (同じ列数、同じ列定義、同じ名前)。挿入、更新、削除の操作、および REFRESH TABLE ステートメントを使用して表を保守できるように、マテリアライズ照会表をユーザー管理のものとして定義します。
   ALTER TABLE TRANSCOUNT ADD MATERIALIZED QUERY
     (SELECT ACCTID, LOCID, YEAR, COUNT(*) as cnt
      FROM TRANS
      GROUP BY ACCTID, LOCID, YEAR )
      DATA INITIALLY DEFERRED
      REFRESH DEFERRED
      MAINTAINED BY USER;
例 9: 表 TB1 に、CHAR(4) FOR BIT DATA WITH DEFAULT 'AB' として定義されている列 COL1 があるとします。表に保管される値は X'C1C24040' になります。以下の ALTER TABLE ステートメントが実行されると、表に保管される結果の値は BX'C1C240400000' になります。
   ALTER TABLE TB1 
		ALTER COLUMN COL1 
			SET DATA TYPE BINARY(6);
変更の始まり

列アクセス制御の例

例 1:
SELECT DISTINCT ステートメントは、CUSTOMER 表にあるデータに基づいて、SALARY 値が 100,000 の行を 1 つ戻します。SALARY 値をマスクするために、列マスク SALARY_MASK が作成されます。CUSTOMER 表の列アクセス制御が活動化されると、SALARY 列に列マスクが適用されます。'MGR' ID (またはロール) を持つユーザーが SELECT DISTINCT ステートメントを発行します。SELECT DISTINCT ステートメントは、重複の除去は SALARY 列のマスクされない値に基づいているため、依然として 1 つの行を戻しますが、その行で戻される値は、マスクされた SALARY 値 (125,000 か 110,000 のいずれか) に基づきます。

CUSTOMER 表は、以下のようになっています。

SALARY COMMISSION EMPID
100,000 25,000 123456
100,000 10,000 654321
CREATE MASK SALARY_MASK ON CUSTOMER
	FOR COLUMN SALARY RETURN 
				CASE WHEN(SESSION_USER = 'MGR')
					   THEN SALARY + COMMISSION
             ELSE SALARY
         END
  ENABLE;

COMMIT;

ALTER TABLE CUSTOMER
	ACTIVATE COLUMN ACCESS CONTROL;

COMMIT;

SELECT DISTINCT SALARY FROM CUSTOMER;
例 2:
SELECT DISTINCT ステートメントは、T1 表および T2 表のデータに基づき、COALESCE 関数を使用して T1.C1 値が 1 の 1 つの行を戻します。T1.C1 の値をマスクするために列マスク C1_MASK が作成されます。 表 T1 の列アクセス制御が活動化されると、表 T1 の列 C1 に列マスクが適用されます。'EMP' ID (またはロール) を持つユーザーが SELECT DISTINCT ステートメントを発行します。SELECT DISTINCT ステートメントは、重複の除去は COALESCE 関数からの T1.C1 のマスクされない値に基づいているため、依然として 1 つの行を戻しますが、この行で戻される値は、COALESCE 関数からの T1.C1 のマスクされた値に基づきます。戻される値は、2 または 3 のいずれかです。
INSERT INTO T1(C1) VALUES(1);
INSERT INTO T1(C1) VALUES(1);
INSERT INTO T2(C1) VALUES(2);
INSERT INTO T2(C1) VALUES(3);

CREATE MASK C1_MASK ON T1
	FOR COLUMN C1 RETURN 
			CASE WHEN(SESSION_USER = 'EMP')
				   THEN NULL
           ELSE C1
       END
  ENABLE;

COMMIT;

ALTER TABLE T1 
 		ACTIVATE COLUMN ACCESS CONTROL;

COMMIT;

SELECT DISTINCT COALESCE(T1.C1, T2.C1) FROM T1, T2;
例 3:
CUSTOMER 表のデータに基づくと、カリフォルニア (CA) とイリノイ (IL) 州の最大収入は同じで、50,000 です。このため、SELECT DISTINCT ステートメントは 1 つの行を戻します。収入値をマスクするために列マスク INCOME_MASK が作成されます。CUSTOMER 表の列アクセス制御が活動化されると、INCOME 列に列マスクが適用され、MAX 集約関数が評価されます。ただし、列マスク INCOME_MASK は、イリノイ州では収入値 0 を 100,000 としてマスクします。このため、イリノイ州では最大収入は 100,000 になりますが、カリフォルニア州の最大収入は 50,000 のままです。SELECT DISTINCT ステートメントの述部で X.B が使用されています。このため、MAX(INCOME) 関数のオリジナルの INCOME 値とオリジナルの結果を保存しておく必要があります。したがって、SELECT DISTINCT ステートメントは依然として 1 つの行を戻しますが、この行の値は deterministic でない場合があります。つまり、この値は 'CA' 行からの 50,000、または 'IL' 行からの 100,000 である場合があります。

CUSTOMER 表は、以下のようになっています。

STATE INCOME
CA 40,000
CA 50,000
IL 0
IL 10,000
IL 50,000
CREATE MASK INCOME_MASK ON CUSTOMER
	FOR COLUMN INCOME RETURN
				 CASE WHEN(INCOME = 0) 
						  THEN 100000
			         ELSE INCOME
				 END
	ENABLE;

COMMIT;

ALTER TABLE CUSTOMER 
		ACTIVATE COLUMN ACCESS CONTROL;

COMMIT;

SELECT DISTINCT B FROM
	(SELECT STATE, MAX(INCOME) FROM CUSTOMER 
		GROUP BY STATE) 	
	 X(A, B)
	   WHERE B > 10000;
例 4:
INCOME + RAND() は、RAND 関数が非 deterministic 関数であるため、非 deterministic です。SELECT DISTINCT ステートメントは、CUSTOMER 表のデータに基づいて 2 つの特殊行を戻す可能性が高くなります。しかし、1 つの行のみを戻すことがあります。収入値をマスクするために列マスク INCOME_MASK が作成されます。CUSTOMER 表の列アクセス制御が活動化されると、INCOME 列に列マスクが適用されます。これによって、両方の行のマスク値が同じになります。RAND 関数は非 deterministic 関数であるため、SELECT DISTINCT ステートメントは、依然として 2 つの特殊行を戻す可能性が高いですが、1 行のみを戻すことがあります。RAND 関数によって生じた不確実性によって SELECT DISTINCT ステートメントの結果が非 deterministic になります。

CUSTOMER 表は、以下のようになっています。

STATE INCOME
CA 40,000
CA 50,000
CREATE MASK INCOME_MASK ON CUSTOMER
	FOR COLUMN INCOME RETURN 
			CASE WHEN(INCOME = 40,000) 
					 THEN 50000
           ELSE INCOME
       END
	ENABLE;

COMMIT;

ALTER TABLE CUSTOMER 
		ACTIVATE COLUMN ACCESS CONTROL;

COMMIT;

SELECT DISTINCT A FROM
		(SELECT INCOME + RAND() FROM CUSTOMER) 
	X(A)
		WHERE A > 10000;
例 5:
市が SJ、SFO、または OKLD の場合に州と市の名前を示す値を戻すために、CUSTOMER 表の STATE 列に対して列マスク STATE_MASK が作成されます。これ以外の場合、市は戻されず、州のみが戻されます。CUSTOMER 表の列アクセス制御が活動化されると、STATE 列を使用して結果をグループ化する SELECT ステートメントが発行されます。ただし、列マスク STATE_MASK で参照される CITY 列はグループ化列でないため、列マスク STATE_MASK がこのステートメントには適切でないことを示すバインド時エラーが戻されます。

CUSTOMER 表は、以下のようになっています。

STATE CITY INCOME
CA SJ 40,000
CA SC 30,000
CA SB 60,000
CA SFO 80,000
CA OKLD 50,000
CA SJ 70,000
NY NY 50,000
CREATE MASK STATE_MASK ON CUSTOMER
	FOR COLUMN STATE RETURN
			 CASE WHEN(CITY = 'SJ') 
					  		THEN CITY||', '||STATE
					  WHEN(CITY = 'SFO') 
							THEN CITY||', '||STATE
					  WHEN(CITY = 'OKLD') 
							THEN CITY||', '||STATE
					  ELSE ' , '||STATE
        END
	ENABLE;

COMMIT;

ALTER TABLE CUSTOMER 
	ACTIVATE COLUMN ACCESS CONTROL;

COMMIT;

SELECT STATE, AVG(INCOME) FROM CUSTOMER 
	GROUP BY STATE 
  HAVING STATE = 'CA';
変更の終わり