CREATE TABLE

CREATE TABLE ステートメントは、現行サーバーで表を定義します。 この定義には、その表の名前、およびその表の列の名前と属性を含める必要があります。 この定義には、基本キーなど、表の他の属性も含めることができます。

呼び出し

このステートメントは、アプリケーション・プログラムに組み込むことができ、また対話式に呼び出すこともできます。 これは、動的に準備できる実行可能ステートメントです。

権限

このステートメントの権限 ID が保持する特権には、少なくとも以下の 1 つ が含まれていなければなりません。

このステートメントの権限 ID が保持する特権には、少なくとも以下の 1 つ が含まれていなければなりません。

  • 次のシステム権限
    • 物理ファイル作成 (CRTPF) コマンドに対する *USE 権限
    • データ・ディクショナリー に対する *CHANGE 権限。ただし、表が作成され るライブラリーが、データ・ディクショナリーを持つ SQL スキーマの場合。
  • データベース管理者権限

SQL 名が指定され、該当の表が作成されるライブラリーの名前と同じ名前の ユーザー・プロファイルが存在し、しかもその名前がステートメントの権限 ID と異なっている場合、ステートメントの権限 ID によって保持される特権 には、少なくとも次の 1 つが含まれていなければなりません。

  • その名前を持つユーザー・プロファイルに対する *ADD システム権限
  • データベース管理者権限

外部キーを定義する場合、ステートメントの権限 ID が保持する特権には、親表に関して少なくとも次の 1 つが含まれていなければなりません。

  • 該当の表に対する REFERENCES 特権またはオブジェクト管理権限。
  • 指定された親キーの各列に対する REFERENCES 特権。
  • その表の所有権
  • データベース管理者権限

フィールド・プロシージャーを定義する場合は、ステートメントの権限 ID によって保持される特権に、少なくとも次のいずれか 1 つが含まれなければなりません。

  • 次のシステム権限
    • プログラムに対する *EXECUTE システム権限、および
    • プログラムが入っているライブラリーに対する *EXECUTE システム権限
  • データベース管理者権限

LIKE 文節または選択ステートメント を指定する場合は、この ステートメントの権限 ID が保持する特権には、これらの文節で指定する表 またはビューに対する次の特権の少なくとも 1 つが含まれていなければなりません。

  • 表またはビューに対する SELECT 特権
  • 表またはビューの所有権
  • データベース管理者権限

特殊タイプを参照する場合は、ステートメントの権限 ID によって保持される 特権に、少なくとも次のいずれか 1 つが含まれなければなりません。

  • ステートメント内で識別された、それぞれの特殊タイプごとに、
    • その特殊タイプに対する USAGE 特権、および
    • その特殊タイプを含むライブラリーに対する *EXECUTE システム権限
  • データベース管理者権限

変更の始まり既存の表に置き換えるには、ステートメントの権限 ID が保持する特権に、次のうち少なくともいずれか 1 つを含める必要があります。変更の終わり

変更の始まり
  • 次のシステム権限
    • 表に対する *OBJMGT のシステム権限
    • 表を削除するために必要な全権限
  • データベース管理者権限
変更の終わり

SQL 特権に対応するシステム権限については、『表またはビューへの権限を検査する際の対応するシステム権限』および『特殊タイプへの権限を検査する際の対応するシステム権限』を参照してください。

構文

構文図を読む構文図をスキップする
>>-CREATE--+------------+--TABLE--table-name--+-------------------------------------------+-->
           '-OR REPLACE-'                     '-FOR SYSTEM NAME--system-object-identifier-'   

        .-,------------------------------------------.        
        V                                            |        
>--+-(----+-column-definition----------------------+-+--)-+----->
   |      +-period-definition----------------------+      |   
   |      +-LIKE--+-table-name-+--+--------------+-+      |   
   |      |       '-view-name--'  '-copy-options-' |      |   
   |      +-unique-constraint----------------------+      |   
   |      +-referential-constraint-----------------+      |   
   |      '-check-constraint-----------------------'      |   
   +-LIKE--+-table-name-+--+--------------+---------------+   
   |       '-view-name--'  '-copy-options-'               |   
   +-as-result-table--+--------------+--------------------+   
   |                  '-copy-options-'                    |   
   '-materialized-query-definition------------------------'   

                            (1)   
>--+----------------------+------------------------------------->
   '-NOT LOGGED INITIALLY-'       

                   .-CARDINALITY-.                              
   .-NOT VOLATILE--+-------------+-.                            
>--+-------------------------------+--+---------------------+--->
   |           .-CARDINALITY-.     |  '-RCDFMT--format-name-'   
   '-VOLATILE--+-------------+-----'                            

>--+------------------+--+-------------------+------------------>
   '-media-preference-'  '-memory-preference-'   

   .-ON REPLACE PRESERVE ALL ROWS-.                            
>--+------------------------------+--+---------------------+---><
   +-ON REPLACE PRESERVE ROWS-----+  +-distribution-clause-+   
   '-ON REPLACE DELETE ROWS-------'  '-partitioning-clause-'   

media-preference

   .-UNIT ANY-.   
|--+-UNIT SSD-+-------------------------------------------------|

memory-preference

|--KEEP IN MEMORY--+-NO--+--------------------------------------|
                   '-YES-'   

注:
  1. オプション文節は、どのような順序で指定しても構いません。
構文図を読む構文図をスキップする
column-definition

|--column-name--+-------------------------------------+--------->
                |      .-COLUMN-.                     |   
                '-FOR--+--------+--system-column-name-'   

             (1)   
>--data-type---------------------------------------------------->

   .--------------------------------------------------------------.       
   V                                                              | (3)   
>----+----------------------------------------------------------+-+------|
     +-default-clause-------------------------------------------+         
     +-generated-clause-----------------------------------------+         
     +-NOT NULL-------------------------------------------------+         
     | .-NOT HIDDEN--------.                                    |         
     +-+-------------------+------------------------------------+         
     | '-IMPLICITLY HIDDEN-'                                    |         
     +-column-constraint----------------------------------------+         
     +-FIELDPROC--external-program-name--+--------------------+-+         
     |                                   |    .-,--------.    | |         
     |                                   |    V          |    | |         
     |                                   '-(----constant-+--)-' |         
     |                  (2)                                     |         
     '-datalink-options-----------------------------------------'         

data-type

|--+-built-in-type------+---------------------------------------|
   '-distinct-type-name-'   

注:
  1. data-type は、行変更タイム・スタンプ列、変更の始まり行開始および行終了タイム・スタンプ列、およびトランザクション開始 ID タイム・スタンプ列変更の終わりにはオプションです。
  2. データ・リンク・オプション は、DATALINK、および DATALINK をソースとする特殊タイプに対してのみ指定することができます。
  3. 同じ文節を複数回指定することはできません。
構文図を読む構文図をスキップする
built-in-type

|--+-+---SMALLINT---+----------------------------------------------------------------------------------------------------------+--|
   | +-+-INTEGER-+--+                                                                                                          |   
   | | '-INT-----'  |                                                                                                          |   
   | '---BIGINT-----'                                                                                                          |   
   |                  .-(5,0)------------------------.                                                                         |   
   +-+-+-DECIMAL-+-+--+------------------------------+-------------------------------------------------------------------------+   
   | | '-DEC-----' |  |             .-,0--------.    |                                                                         |   
   | '-+-NUMERIC-+-'  '-(--integer--+-----------+--)-'                                                                         |   
   |   '-NUM-----'                  '-, integer-'                                                                              |   
   |          .-(--53--)------.                                                                                                |   
   +-+-FLOAT--+---------------+-+----------------------------------------------------------------------------------------------+   
   | |        '-(--integer--)-' |                                                                                              |   
   | +-REAL---------------------+                                                                                              |   
   | |         .-PRECISION-.    |                                                                                              |   
   | '-DOUBLE--+-----------+----'                                                                                              |   
   |             .-(--34--)-.                                                                                                  |   
   +---DECFLOAT--+----------+--------------------------------------------------------------------------------------------------+   
   |             '-(--16--)-'                                                                                                  |   
   |                    .-(--1--)-------.                                                                                      |   
   +-+-+-+-CHARACTER-+--+---------------+-------------------------------+--+----------------+---------------------+------------+   
   | | | '-CHAR------'  '-(--integer--)-'                               |  +-FOR BIT DATA---+                     |            |   
   | | '-+-+-CHARACTER-+--VARYING-+--(--integer--)--+-----------------+-'  +-FOR SBCS DATA--+                     |            |   
   | |   | '-CHAR------'          |                 '-allocate-clause-'    +-FOR MIXED DATA-+                     |            |   
   | |   '-VARCHAR----------------'                                        '-ccsid-clause---'                     |            |   
   | |                                          .-(--1M--)-------------.                                          |            |   
   | '-----+-+-CHARACTER-+--LARGE OBJECT-+------+----------------------+--+-----------------+--+----------------+-'            |   
   |       | '-CHAR------'               |      '-(--integer--+---+--)-'  '-allocate-clause-'  +-FOR SBCS DATA--+              |   
   |       '-CLOB------------------------'                    +-K-+                            +-FOR MIXED DATA-+              |   
   |                                                          +-M-+                            '-ccsid-clause---'              |   
   |                                                          '-G-'                                                            |   
   |                .-(--1--)-------.                                                                                          |   
   +-+---GRAPHIC----+---------------+----------------------------+--+--------------+-------------------------------------------+   
   | |              '-(--integer--)-'                            |  '-ccsid-clause-'                                           |   
   | +-+-GRAPHIC VARYING-+--(--integer--)--+-----------------+---+                                                             |   
   | | '-VARGRAPHIC------'                 '-allocate-clause-'   |                                                             |   
   | |             .-(--1M--)-------------.                      |                                                             |   
   | '---DBCLOB----+----------------------+--+-----------------+-'                                                             |   
   |               '-(--integer--+---+--)-'  '-allocate-clause-'                                                               |   
   |                             +-K-+                                                                                         |   
   |                             +-M-+                                                                                         |   
   |                             '-G-'                                                                                         |   
   |                             .-(--1--)-------.                                                                             |   
   +-+-+-+-NATIONAL CHARACTER-+--+---------------+-------------------------------+---------------------+--+------------------+-+   
   | | | +-NATIONAL CHAR------+  '-(--integer--)-'                               |                     |  '-normalize-clause-' |   
   | | | '-NCHAR--------------'                                                  |                     |                       |   
   | | '-+-+-NATIONAL CHARACTER-+--VARYING-+--(--integer--)--+-----------------+-'                     |                       |   
   | |   | +-NATIONAL CHAR------+          |                 '-allocate-clause-'                       |                       |   
   | |   | '-NCHAR--------------'          |                                                           |                       |   
   | |   '-NVARCHAR------------------------'                                                           |                       |   
   | |                                                   .-(--1M--)-------------.                      |                       |   
   | '-----+-+-NATIONAL CHARACTER-+--LARGE OBJECT-+------+----------------------+--+-----------------+-'                       |   
   |       | '-NCHAR--------------'               |      '-(--integer--+---+--)-'  '-allocate-clause-'                         |   
   |       '-NCLOB--------------------------------'                    +-K-+                                                   |   
   |                                                                   +-M-+                                                   |   
   |                                                                   '-G-'                                                   |   
   |             .-(--1--)-------.                                                                                             |   
   +-+-+-BINARY--+---------------+------------------------------+-----------------+--------------------------------------------+   
   | | |         '-(--integer--)-'                              |                 |                                            |   
   | | '-+-BINARY VARYING-+--(--integer--)--+-----------------+-'                 |                                            |   
   | |   '-VARBINARY------'                 '-allocate-clause-'                   |                                            |   
   | |                              .-(--1M--)-------------.                      |                                            |   
   | '---+-BLOB----------------+----+----------------------+--+-----------------+-'                                            |   
   |     '-BINARY LARGE OBJECT-'    '-(--integer--+---+--)-'  '-allocate-clause-'                                              |   
   |                                              +-K-+                                                                        |   
   |                                              +-M-+                                                                        |   
   |                                              '-G-'                                                                        |   
   +-+-DATE-------------------------+------------------------------------------------------------------------------------------+   
   | |       .-(--0--)-.            |                                                                                          |   
   | +-TIME--+---------+------------+                                                                                          |   
   | |            .-(--6--)-------. |                                                                                          |   
   | '-TIMESTAMP--+---------------+-'                                                                                          |   
   |              '-(--integer--)-'                                                                                            |   
   |             .-(--200--)-----.                                                                                             |   
   +---DATALINK--+---------------+--+-----------------+--+--------------+------------------------------------------------------+   
   |             '-(--integer--)-'  '-allocate-clause-'  '-ccsid-clause-'                                                      |   
   +---ROWID-------------------------------------------------------------------------------------------------------------------+   
   '---XML--+-----------------+--+--------------+------------------------------------------------------------------------------'   
            '-allocate-clause-'  '-ccsid-clause-'                                                                                  

構文図を読む構文図をスキップする
allocate-clause

|--ALLOCATE--(--integer--)--------------------------------------|

ccsid-clause

|--CCSID--integer--+------------------+-------------------------|
                   '-normalize-clause-'   

normalize-clause

   .-NOT NORMALIZED-.   
|--+-NORMALIZED-----+-------------------------------------------|

default-clause

   .-WITH-.                                                                                    
|--+------+--DEFAULT--+--------------------------------------------------------------------+--|
                      +-constant-----------------------------------------------------------+   
                      +-USER---------------------------------------------------------------+   
                      +-NULL---------------------------------------------------------------+   
                      +-CURRENT_DATE-------------------------------------------------------+   
                      +-CURRENT_TIME-------------------------------------------------------+   
                      |                    .-(--6--)-------.                               |   
                      +-CURRENT_TIMESTAMP--+---------------+-------------------------------+   
                      |                    '-(--integer--)-'                               |   
                      '-cast-function-name--(--+-constant-----------------------------+--)-'   
                                               +-USER---------------------------------+        
                                               +-CURRENT_DATE-------------------------+        
                                               +-CURRENT_TIME-------------------------+        
                                               |                    .-(--6--)-------. |        
                                               '-CURRENT_TIMESTAMP--+---------------+-'        
                                                                    '-(--integer--)-'          

構文図を読む構文図をスキップする
generated-clause

                  .-ALWAYS-.                                               
     .-GENERATED -+--------+-. (1)                                         
|--+-+-----------------------+------+--------------------------------+-+--|
   | '-GENERATED BY DEFAULT--'      +-identity-options---------------+ |   
   |                                '-as-row-change-timestamp-clause-' |   
   |            .-ALWAYS-.                                             |   
   '-GENERATED--+--------+--+-as-row-transaction-timestamp-clause-+----'   
                            +-as-row-transaction-start-id-clause--+        
                            '-as-generated-expression-clause------'        

identity-options

|--AS IDENTITY--+------------------------------------------------------+--|
                |    .--------------------------------------------.    |   
                |    V               .-1----------------.     (2) |    |   
                '-(----+-START WITH--+-numeric-constant-+---+-----+--)-'   
                       |               .-1----------------. |              
                       +-INCREMENT BY--+-numeric-constant-+-+              
                       | .-NO MINVALUE----------------.     |              
                       +-+-MINVALUE--numeric-constant-+-----+              
                       | .-NO MAXVALUE----------------.     |              
                       +-+-MAXVALUE--numeric-constant-+-----+              
                       | .-NO CYCLE-.                       |              
                       +-+-CYCLE----+-----------------------+              
                       | .-CACHE--20------.                 |              
                       +-+-NO CACHE-------+-----------------+              
                       | '-CACHE--integer-'                 |              
                       | .-NO ORDER-.                       |              
                       '-+-ORDER----+-----------------------'              

as-row-change-timestamp-clause

|--FOR EACH ROW ON UPDATE AS ROW CHANGE TIMESTAMP---------------|

as-row-transaction-timestamp-clause

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

as-row-transaction-start-id-clause

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

注:
  1. GENERATED を指定できるのは、列のデータ・タイプが ROWID (また は ROWID データ・タイプに基づく特殊タイプ) であるか、列が ID 列であるか、または列が行変更タイム・スタンプである場合のみです。
  2. 同じ文節を複数回指定することはできません。
構文図を読む構文図をスキップする
as-generated-expression-clause

|--AS--(--non-deterministic-expression--)-----------------------|

non-deterministic-expression

|--+-DATA CHANGE OPERATION----+---------------------------------|
   +-special-register---------+   
   '-built-in-global-variable-'   

構文図を読む構文図をスキップする
special-register

|--+-CURRENT CLIENT_ACCTNG-----+--------------------------------|
   +-CURRENT CLIENT_APPLNAME---+   
   +-CURRENT CLIENT_PROGRAMID--+   
   +-CURRENT CLIENT_USERID-----+   
   +-CURRENT CLIENT_WRKSTNNAME-+   
   +-CURRENT SERVER------------+   
   '-+-SESSION_USER-+----------'   
     '-USER---------'              

built-in-global-variable

|--+-QSYS2.JOB_NAME---------------+-----------------------------|
   +-QSYS2.SERVER_MODE_JOB_NAME---+   
   +-SYSIBM.CLIENT_HOST-----------+   
   +-SYSIBM.CLIENT_IPADDR---------+   
   +-SYSIBM.CLIENT_PORT-----------+   
   +-SYSIBM.PACKAGE_NAME----------+   
   +-SYSIBM.PACKAGE_SCHEMA--------+   
   +-SYSIBM.PACKAGE_VERSION-------+   
   +-SYSIBM.ROUTINE_SCHEMA--------+   
   +-SYSIBM.ROUTINE_SPECIFIC_NAME-+   
   '-SYSIBM.ROUTINE_TYPE----------'   

period-definition

           .-FOR-.                                                             
|--PERIOD--+-----+--SYSTEM_TIME--(--begin-column-name--,--end-column-name--)--|

構文図を読む構文図をスキップする
column-constraint

|--+-----------------------------+--+-+-PRIMARY KEY-+------------------------------------------------------------------------------+--|
   '-CONSTRAINT--constraint-name-'  | '-UNIQUE------'                                                                              |   
                                    +-references-clause----------------------------------------------------------------------------+   
                                    |                               .--------------------------------------------------------.     |   
                                    |                               V                                                        | (1) |   
                                    '-CHECK--(--check-condition--)----+----------------------------------------------------+-+-----'   
                                                                      +-ON INSERT VIOLATION SET--column-name-- = --DEFAULT-+           
                                                                      '-ON UPDATE VIOLATION PRESERVE--column-name----------'           

注:
  1. 同じ文節を複数回指定することはできません。
構文図を読む構文図をスキップする
datalink-options

   .-LINKTYPE URL-.  .-NO LINK CONTROL--------------------------.   
|--+--------------+--+------------------------------------------+--|
                     '-FILE LINK CONTROL--+-file-link-options-+-'   
                                          '-MODE DB2OPTIONS---'     

file-link-options

   .--------------------------------------.       
   V                                      | (1)   
|------+-INTEGRITY ALL----------------+---+---------------------|
       +-+-READ PERMISSION FS-+-------+           
       | '-READ PERMISSION DB-'       |           
       +-+-WRITE PERMISSION FS------+-+           
       | '-WRITE PERMISSION BLOCKED-' |           
       +-RECOVERY NO------------------+           
       '-+-ON UNLINK RESTORE-+--------'           
         '-ON UNLINK DELETE--'                    

as-result-table

|--+------------------------------------------------------------+-->
   '-(--column-name--+-------------------------------------+--)-'   
                     |      .-COLUMN-.                     |        
                     '-FOR--+--------+--system-column-name-'        

>--AS--(--select-statement--)--+-WITH NO DATA-+-----------------|
                               '-WITH DATA----'   

copy-options

   .---------------------------------------------------------------.   
   |                         .-COLUMN ATTRIBUTES-.                 |   
   |   .-EXCLUDING IDENTITY--+-------------------+-.               |   
   V   |                     .-COLUMN ATTRIBUTES-. |               |   
|----+-+-INCLUDING IDENTITY--+-------------------+-+-------------+-+--|
     |              .-COLUMN-.                                   |     
     | .-EXCLUDING--+--------+--DEFAULTS-.                       |     
     | |            .-COLUMN-.           |                       |     
     +-+-INCLUDING--+--------+--DEFAULTS-+-----------------------+     
     | '-USING TYPE DEFAULTS-------------'                       |     
     |                                .-COLUMN ATTRIBUTES-.      |     
     | .-EXCLUDING IMPLICITLY HIDDEN -+-------------------+-.    |     
     | |                              .-COLUMN ATTRIBUTES-. |    |     
     +-+-INCLUDING IMPLICITLY HIDDEN -+-------------------+-+----+     
     |                                   .-COLUMN ATTRIBUTES-.   |     
     | .-EXCLUDING ROW CHANGE TIMESTAMP -+-------------------+-. |     
     | |                                 .-COLUMN ATTRIBUTES-. | |     
     '-+-INCLUDING ROW CHANGE TIMESTAMP -+-------------------+-+-'     

注:
  1. 5 つのファイル・リンク・オプション をすべて指定する必要がありますが、指定する順序は任意です。
構文図を読む構文図をスキップする
unique-constraint

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

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

referential-constraint

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

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

references-clause

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

   .-ON DELETE NO ACTION--------.  .-ON UPDATE NO ACTION-. (1)   
>--+----------------------------+--+---------------------+------|
   '-ON DELETE--+-RESTRICT----+-'  '-ON UPDATE RESTRICT--'       
                +-CASCADE-----+                                  
                +-SET NULL----+                                  
                '-SET DEFAULT-'                                  

check-constraint

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

                                 .--------------------------------------------------------.       
                                 V                                                        | (2)   
>--CHECK--(--check-condition--)----+----------------------------------------------------+-+------|
                                   +-ON INSERT VIOLATION SET--column-name-- = --DEFAULT-+         
                                   '-ON UPDATE VIOLATION PRESERVE--column-name----------'         

distribution-clause

|--IN--NODEGROUP----ノード・グループ名----+-------------------------------------------+--|
                                 |                        .-,-----------.    |   
                                 |                        V             |    |   
                                 '-DISTRIBUTE BY HASH--(----column-name-+--)-'   

注:
  1. ON DELETE と ON UPDATE 文節は、どの順序で指定しても構いません。
  2. 同じ文節を複数回指定することはできません。
構文図を読む構文図をスキップする
partitioning-clause

                   .-RANGE-.                           
|--PARTITION BY--+-+-------+--range-partition-spec-+------------|
                 '-HASH--hash-partition-spec-------'   

range-partition-spec

      .-,--------------------.        .-,-----------------.      
      V                      |        V                   |      
|--(----partition-expression-+--)--(----partition-element-+--)--|

partition-expression

                .-NULLS LAST--.   
|--column-name--+-------------+---------------------------------|
                '-NULLS FIRST-'   

partition-element

|--+-+---------------------------+--boundary-spec--+------------------+--+-------------------+-+--|
   | '-PARTITION--partition-name-'                 '-media-preference-'  '-memory-preference-' |   
   |                                                            (1)                            |   
   '-boundary-spec--EVERY--(--integer-constant--+--------+--)----------------------------------'   
                                                +-DAY----+                                         
                                                +-DAYS---+                                         
                                                +-MONTH--+                                         
                                                +-MONTHS-+                                         
                                                +-YEAR---+                                         
                                                '-YEARS--'                                         

boundary-spec

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

starting-clause

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

注:
  1. partition-element のこの構文が有効なのは、数値データ・タイプまたは日時データ・タイプの partition-expression が 1 つだけ存在する場合です。
構文図を読む構文図をスキップする
ending-clause

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

hash-partition-spec

      .-,-----------.                                 
      V             |                                 
|--(----column-name-+--)--INTO--integer--PARTITIONS-------------|

materialized-query-definition

|--+------------------------------------------------------------+-->
   '-(--column-name--+-------------------------------------+--)-'   
                     |      .-COLUMN-.                     |        
                     '-FOR--+--------+--system-column-name-'        

>--AS--(--select-statement--)--refreshable-table-options--------|

refreshable-table-options

                                                   .----------------------------------------.   
                                                   V  (1)                                   |   
|--+-DATA INITIALLY DEFERRED--+--REFRESH DEFERRED--------+-MAINTAINED BY USER-------------+-+--|
   '-DATA INITIALLY IMMEDIATE-'                          | .-ENABLE QUERY OPTIMIZATION--. |     
                                                         '-+-DISABLE QUERY OPTIMIZATION-+-'     

注:
  1. 同じ文節を複数回指定することはできません。MAINTAINED BY USER を指定しなければなりません。

説明

変更の始まりOR REPLACE変更の終わり
変更の始まり表が現行サーバーに存在する場合に、その変数の定義を置き換えるように指定します。カタログ内で新しい定義が置き換えられる前に、既存の定義が実際に変更されます。
表の定義は、以下の場合に存在します。
  • FOR SYSTEM NAME が指定されていて、system-object-identifier が既存の表の system-object-identifier と一致する。
  • FOR SYSTEM NAME が指定されておらず、table-name が既存の表の system-object-identifier と一致するシステム・オブジェクト名である。
表の定義が存在していて、table-name がシステム・オブジェクト名でない場合は、table-name を変更して表に新しい名前を付けることができます。

このオプションは、表の定義が現行サーバーに存在しない場合には無視されます。

変更の終わり
table-name
表の名前を指定します。 暗黙的または明示的修飾子も含め、この名前で、現行サーバーに既に存在している別名、ファイル、 索引、表、またはビューを識別することはできません。

SQL 名が指定されている場合、表は、暗黙的または明示的修飾子で指定し ているスキーマ内に作成されます。

システム名が指定されている場合、表名は、修飾子で指定しているスキーマ内に作成されます。 修飾されない場合:

  • CURRENT SCHEMA 特殊レジスターの値が *LIBL である場合、表は、現行ライブラリー (*CURLIB) 内に作成されます。
  • そうでない場合、表は現行スキーマ内に作成されます。
FOR SYSTEM NAME system-object-identifier
表のシステム・オブジェクト ID を示します。システム・オブジェクト ID は、現行サーバーに 既に存在する表、ビュー、別名、または索引と同一であってはなりません。 システム・オブジェクト ID は、非修飾システム ID でなければなりません。

システム・オブジェクト ID が 指定される場合、表名 は有効なシステム・オブジェクト名であってはなりません。

column-definition

列の属性を定義します。少なくとも 1 つ以上で、8000 を超えない列の定義がなければなりません。

列の行バッファー・バイト・カウントの合計は、32766 (VARCHAR 列、VARGRAPHIC 列、または VARBINARY 列が指定されている場合は 32740) 以下でなければなりません。さらに、LOB 列または XML 列を指定してある場合は、挿入または更新の時点で、すべての列の行データ・バイト・カウントの合計が 3 758 096 383 を超えていてはなりません。データ・タイプごとの列のバイト・カウントについて は、最大行サイズを参照してください。

column-name
表を構成する列の名前を指定します。 列名 は修飾できません。表の複数の列や表のシステム列名に同じ名前を使用することもできません。
FOR COLUMN システム列名
列の IBM® i 名を指定します。表の複数の列やシステム列名に対して、同じ名前を使用してはなりません。

システム列名が指定されず、また列名が有効なシステム列名でない場合には、システム列名が生成されます。 システム列名の生成方法に関する詳細については、列名の生成の規則を参照してください。

data-type
列のデータ・タイプを指定します。
built-in-type
組み込みタイプ には以下のいずれかを使用します。
SMALLINT
短整数を示します。
INTEGER または INT
長整数を示します。
BIGINT
64 ビット整数を示します。
DECIMAL(整数,整数) または DEC(整数,整数)
DECIMAL(整数) または DEC(整数)
DECIMAL または DEC
パック 10 進数を示します。最初の整数は数値の精度、つまり総桁数であり、1 から 63 までの範囲で指定できます。 2 番目の整数は、数値の位取り (小数点の右側に置く桁数) です。位取りは、0 からその数値の精度までの範囲で指定できます。

DECIMAL(p,0) は、DECIMAL(p) と指定でき、また DECIMAL(5,0) は、DECIMAL と指定できます。

NUMERIC(integer,integer) または NUM(integer,integer)
NUMERIC(integer) または NUM(integer)
NUMERIC または NUM
ゾーン 10 進数を示します。最初の整数は数値の精度、つまり総桁数であり、1 から 63 までの範囲で指定できます。 2 番目の整数は、数値の位取り (小数点の右側に置く桁数) です。位取りは、0 からその数値の精度までの範囲で指定できます。

NUMERIC(p) を NUMERIC(p,0) の代わりに、NUMERIC を NUMERIC(5,0) の代わりに使用しても構いません。

FLOAT
倍精度の浮動小数点数を示します。
FLOAT(integer)
指定する整数の値によって、単精度、または倍精度の浮動小数点数を示します。 整数の値は、1 から 53 までの範囲になければなりません。 1 から 24 までの値は単精度、25 から 53 までの値は倍精度を示します。 デフォルト値は 53 です。
REAL
単精度の浮動小数点数を示します。
DOUBLE PRECISION または DOUBLE
倍精度の浮動小数点数を示します。
DECFLOAT(integer)
DECFLOAT
IEEE 10 進浮動小数点数を示します。 整数 の値は、16 か 34 でなければならず、これは、保管できる有効数字の数を表します。 整数 を省略すると、DECFLOAT 列は、34 の有効数字を提示可能になります。
CHARACTER(integer) または CHAR(integer)
CHARACTER または CHAR
整数 (バイト数) で指定した長さの固定長文字ストリングを示します。整数として指定できる値の範囲は、1 から 32766 (NULL 可能な場合には 32765) までです。 FOR MIXED DATA または混合データの CCSID を指定する場合は、4 から 32766 (NULL 可能な場合は 32765) までが範囲になります。 長さ指定を省略すると、長さとして 1 が使用されます。
CHARACTER VARYING (integer) または CHAR VARYING (integer) または VARCHAR (integer)
最大長が整数 (バイト数) の可変長文字ストリングを示します。指定できる範囲は 1 から 32740 (ヌル可能な場合は 32739) までです。FOR MIXED DATA または混合データの CCSID を指定する場合は、4 から 32740 (NULL 可能な場合は 32739) までが範囲になります。
CHARACTER LARGE OBJECT (integer[K|M|G]) または CHAR LARGE OBJECT (integer[K|M|G]) または CLOB (integer[K|M|G])
CHARACTER LARGE OBJECT または CHAR LARGE OBJECT または CLOB
指定された最大長 (バイト数) の文字ラージ・オブジェクト・ストリングを示します。最大長は、1 から 2 147 483 647 の範囲の値でなければなりません。 FOR MIXED DATA や混合データ CCSID を指定する場合は、4 から 2 147 483 647 の 範囲の値を指定します。長さ指定を省略すると、1 メガバイトの長さが想定されます。 CLOB は、分散表内で使用することはできません。
integer
整数の最大値は 2 147 483 647 です。整数 は、ストリングの最大長を表します。
整数 K
整数の最大値は 2 097 152 です。 ストリングの最大長は、整数 の 1024 倍です。
整数 M
整数の最大値は 2 048 です。 ストリングの最大長は、整数 の 1 048 576 倍です。
整数 G
整数の最大値は 2 です。ストリングの最大長は、整数 の 1 073 741 824 倍です。
GRAPHIC(integer)
GRAPHIC
整数 で指定された長さを持つ固定長グラフィック・ストリングを示します。この整数は、1 から 16383 (NULL が使用可能な場合は 16382) までの範囲です。 長さ指定を省略すると、長さとして 1 が使用されます。
VARGRAPHIC(integer) または GRAPHIC VARYING(integer)
最大長が整数 の可変長グラフィック・ストリングを示します。指定できる範囲は 1 から 16370 (NULL 可能な場合は 16369) までです。
DBCLOB(integer[K|M|G])
DBCLOB
指定された最大長の 2 バイト文字ラージ・オブジェクト・ストリングを示します。

最大長は、1 から 1 073 741 823 の範囲の値でなければなりません。長さ指定を省略すると、1 メガバイトの長さが想定されます。 DBCLOB は、分散表内で使用することはできません。

integer
整数の最大値は 1 073 741 823 です。 整数 は、ストリングの最大長を表します。
整数 K
整数の最大値は 1 028 576 です。 ストリングの最大長は、整数 の 1024 倍です。
整数 M
整数の最大値は 1 024 です。 ストリングの最大長は、整数 の 1 048 576 倍です。
整数 G
整数の最大値は 1 です。ストリングの最大長は、整数 の 1 073 741 824 倍です。
NATIONAL CHARACTER (integer) または NATIONAL CHAR (integer) または NCHAR (integer)
NATIONAL CHARACTER または NATIONAL CHAR または NCHAR
整数 で指定された長さを持つ固定長 Unicode グラフィック・ストリングを示します。この整数は、1 から 16383 (NULL が使用可能な場合は 16382) までの範囲です。長さ指定を省略すると、長さとして 1 が使用されます。CCSID は 1200 です。
NATIONAL CHARACTER VARYING (integer) または NATIONAL CHAR VARYING (integer) または NCHAR VARYING (integer) または NVARCHAR (integer)
最大長が整数 の可変長 Unicode グラフィック・ストリングを示します。指定できる範囲は 1 から 16370 (NULL 可能な場合は 16369) までです。CCSID は 1200 です。
NATIONAL CHARACTER LARGE OBJECT (integer[K|M|G]) または NCHAR LARGE OBJECT (integer[K|M|G]) または NCLOB(integer[K|M|G])
NATIONAL CHARACTER LARGE OBJECT または NCHAR LARGE OBJECT または NCLOB
指定された最大長の Unicode 2 バイト文字ラージ・オブジェクト・ストリングを示します。

最大長は、1 から 1 073 741 823 の範囲の値でなければなりません。長さ指定を省略すると、1 メガバイトの長さが想定されます。 CCSID は 1200 です。 NCLOB は、分散表内で使用することはできません。

integer
整数の最大値は 1 073 741 823 です。 整数 は、ストリングの最大長を表します。
整数 K
整数の最大値は 1 028 576 です。 ストリングの最大長は、整数 の 1024 倍です。
整数 M
整数の最大値は 1 024 です。 ストリングの最大長は、整数 の 1 048 576 倍です。
整数 G
整数の最大値は 1 です。ストリングの最大長は、整数 の 1 073 741 824 倍です。
BINARY(integer)
BINARY
整数 で指定した長さの固定長バイナリー・ストリングを示します。 整数として指定できる値の範囲は、1 から 32766 (NULL 可能な場合には 32765) までです。 長さ指定を省略すると、長さとして 1 が使用されます。
BINARY VARYING (integer) または VARBINARY(integer)
最大長が整数 の可変長バイナリー・ストリングを示します。指定できる範囲は 1 から 32740 (NULL 可能な場合は 32739) までです。
BLOB(integer[K|M|G]) または BINARY LARGE OBJECT(integer[K|M|G])
BLOB または BINARY LARGE OBJECT
指定された最大長の 2 進ラージ・オブジェクト・ストリングを示 します。最大長は、1 から 2 147 483 647 の範囲の値でなければなりません。 長さ指定を省略すると、1 メガバイトの長さが想定されます。 BLOB は、分散表内で使用することはできません。
integer
整数の最大値は 2 147 483 647 です。整数 は、ストリングの最大長を表します。
整数 K
整数の最大値は 2 097 152 です。 ストリングの最大長は、整数 の 1024 倍です。
整数 M
整数の最大値は 2 048 です。 ストリングの最大長は、整数 の 1 048 576 倍です。
整数 G
整数の最大値は 2 です。ストリングの最大長は、整数 の 1 073 741 824 倍です。
DATE
日付を示します。
TIME
時刻を示します。
TIMESTAMP(integer) または TIMESTAMP
タイム・スタンプを示します。integer は 0 から 12 までの整数で、秒未満の精度を 0 (秒) から 12 (ピコ秒) で指定します。デフォルトは 6 (マイクロ秒) です。
DATALINK(integer ) または DATALINK
指定された最大長のデータ・リンクを示します。最大長は、1 から 32717 の範囲の値でなければなりません。 FOR MIXED DATA や混合データ CCSID を指定する場合は、4 から 32717 の範囲の値を指定します。予期される最大の URL と、何らかのデータ・リン ク・コメントが収まるだけの充分な長さを指定する必要があります。 長さ指定を省略すると、200 という長さが想定されます。DATALINK は、分散表内で使用することはできません。

DATALINK 値は、1 組の組み込みスカラー関数でカプセル化される値です。DLVALUE 関数で DATALINK 値を作成します。 次の関数を使用すれば、DATALINK 値から属性を抽出することができます。

  • DLCOMMENT
  • DLLINKTYPE
  • DLURLCOMPLETE
  • DLURLPATH
  • DLURLPATHONLY
  • DLURLSCHEME
  • DLURLSERVER

データ・リンクは、どの索引にもその一部として含めることはできません。 したがって、基本キー、外部キー、または固有制約の 1 つの列としてデータ・リンクを組み込むことは不可能です。

ROWID
行 ID を示します。 ROWID 列は、1 つの表に 1 つだけ設けることができます。 ROWID はパーティション化された表で使用することはできません。
XML
XML 文書の場合。XML 列に挿入できるのは整形式の文書のみです。列の CCSID を 65535 とすることはできません。列の最大長は、常に 2 147 483 647 バイトになります。
XML 列には、以下の制限があります。
  • 列は、どの索引にもその一部として含めることはできません。
  • 列は、主キー、ユニーク・キー、または外部キーにもその一部として含めることはできません。
  • チェック制約でその列を使用することはできません。
  • その列でデフォルト値 (WITH DEFAULT) を指定することはできません。 その列がヌル可能である場合は、列のデフォルト値は NULL 値です。
  • 分散表の分散文節でその列を指定することはできません。
  • パーティション表のパーティション化文節でその列を指定することはできません。
distinct-type-name
列のデータ・タイプが、特殊タイプ (ユーザー定義のデータ・タイプ) であることを指定します。 この列の長さ、精度、および位取りは、それぞれ、特殊タイプのソース となっているタイプの長さ、精度、および位取りと同じになります。 スキーマ名なしの特殊タイプを指定すると、その特殊 タイプ名は、SQL パス上のスキーマを検索することで解決されます。
ALLOCATE(integer)
VARCHAR、VARGRAPHIC、VARBINARY、XML、および LOB タイプに関して、それぞれの行の該当列に対して予約するスペースを指定します。長さが割り振られた値以下の列の値は、行の固定長部分に保管されます。長さが割り振られた値より長い列の値は、行の可変長部分に保管され、これを検索するためには、余分の入出力操作が必要になります。 割り振ることのできる値の範囲は、1 からストリングの最大長までです が、最大行バッファー・サイズにより制限されます。 最大行バッファー・サイズについては、最大行サイズを参照してください。FOR MIXED DATA または混合データの CCSID を指定する場合は、4 からストリングの最大長までが範囲になります。 割り振られる長さを指定しなかった場合は、割り振られる長さに 0 を指定したものと見なされます。 VARGRAPHIC の場合、整数は、DBCS または Unicode GRAPHIC 文字の数になります。 デフォルト値として定数が指定され、ALLOCATE の長さがそのデフォルト値の長さより小さい場合は、ALLOCATE の長さはそのデフォルト値の長さであると見なされます。
FOR BIT DATA
列の値が、コード化文字セットと関連付けられていないこと、および 変換されないことを指定します。 FOR BIT DATA は、CHARACTER または VARCHAR の列にのみ有効です。FOR BIT DATA を指定した列の CCSID は、65535 です。 FOR BIT DATA は、CLOB 列には使用できません。
FOR SBCS DATA
列の値に、SBCS (1 バイト文字セット) データが入ることを指定します。 FOR SBCS DATA が、CHAR、VARCHAR、および CLOB 列のデフォルト値になるのは、表の作成時における現行サーバーのデフォルトの CCSID が DBCS 対応でない場合、あるいは、それらの列の長さが 4 よりも小さい場合です。FOR SBCS DATA は、CHARACTER、VARCHAR、または CLOB 列のみに有効です。 FOR SBCS DATA の CCSID は、表作成時点における現行サーバーのデフォルトの CCSID によって決まります。
FOR MIXED DATA
列の値に、SBCS データと DBCS データの両方が入ることを指定します。 FOR MIXED DATA が、CHAR、VARCHAR、および CLOB 列のデフォルト値になるのは、表の作成時における現行サーバーのデフォルトの CCSID が DBCS 対応であり、しかも、それらの列の長さが 3 よりも大きい場合です。どの FOR MIXED DATA 列も DBCS 混用アプリケーション・サーバー・フィールドです。FOR MIXED DATA は、CHARACTER、 VARCHAR、または CLOB 列のみに有効です。 FOR MIXED DATA の CCSID は、表作成時点における現行サーバーのデフォルトの CCSID によって決まります。
CCSID 整数
整数で指定した CCSID を持つデータが、列の値に入ることを指定します。 その整数が SBCS CCSID である場合、その列のデータは SBCS データです。 整数が混合データ CCSID である場合、その列は混合データとなり、その列の長さには、3 よりも大きい値を指定する必要があります。文字列の場合、CCSID は SBCS CCSID や 混合データ CCSID にする必要があります。 グラフィックの列の場合は、CCSID は DBCS、UTF-16、または UCS-2 CCSID でなければなりません。 CCSID がグラフィックの列に指定されていない場合は、CCSID は、表の作成時点における現行サーバーのデフォルトの CCSID によって決まります。 XML 列の場合、CCSID は 65535 であってはなりません。XML 列の CCSID を指定しない場合は、CREATE TABLE の実行時に、SQL_XML_DATA_CCSID QAQQINI オプションの設定に基づいて CCSID が設定されます。デフォルトの CCSID は 1208 です。このオプションの説明については、XML 値を参照してください。 有効な CCSID のリストについては、CCSID の値の項を参照してください。

CCSID 1208 (UTF-8) または 1200 (UTF-16) データには結合文字を含めることができます。 合成文字サポートにより、1 つ以上の文字を組み合わせて 1 文字にすることが可能です。 データ・ストリングとして、1 文字目の後に、 最大 300 の異なる非スペーシング・アクセント文字 (ウムラウト、アクサンなど) を続けることができます。 結果文字が文字セットで既に定義済みの文字である場合、その文字には複数の表記があります。 正規化 は、合成文字のストリングを定義済みの 16 進値で置き換えます。 これにより、同じ文字が単一の一貫した方法で表記されるようになります。 正規化が実行されない場合、同一に見える 2 つのストリングは等しく比較されません。

NOT NORMALIZED
データはアプリケーションからの受け渡し時に正規化されません。
NORMALIZED
データはアプリケーションからの受け渡し時に正規化されます。
DEFAULT
列のデフォルト値を指定します。この文節は、1 つの列定義 の中で複数回指定することはできません。次のタイプの列に対しては、DB2® がデフォルト値を生成するため、DEFAULT を指定できません。
  • ROWID 列
  • ID 列 (AS IDENTITY として定義される列)
  • 行変更タイム・スタンプ列
  • 変更の始まり行開始列変更の終わり
  • 変更の始まり行終了列変更の終わり
  • 変更の始まりトランザクション開始 ID 列変更の終わり
  • 変更の始まり生成式列変更の終わり
XML 列のデフォルトは、NULL です。ただし、NOT NULL を指定した場合、デフォルトはありません。
DEFAULT キーワードの後に値が指定されていない場合は、次のようになります。
  • 列がNULL 可能の場合、デフォルト値は NULL 値になります。
  • 列がNULL 可能でない場合、デフォルト値は列のデータ・タイプによって決まります。
    データ・タイプ デフォルト値
    数値 0
    固定長文字またはグラフィック・ストリング ブランク
    固定長バイナリー・ストリング 16 進ゼロ
    可変長ストリング 0 のストリング長
    日付 INSERT の時点の当日の日付
    時刻 INSERT の時点の当日の時刻
    タイム・スタンプ INSERT の時点の当日のタイム・スタンプ
    データ・リンク DLVALUE('','URL','') に対応する値
    特殊タイプ 特殊タイプの対応するソース・タイプのデフォルト値

NOT NULL および DEFAULT を列の定義 から省いた場合、DEFAULT NULL の暗黙の指定が取られます。

constant
その列のデフォルト値としての定数を指定します。 これは、割り当ておよび比較で説明している割り当て規則に従って、その列に割り当てることができる値を表す定数にする必要があります。 浮動小数点定数または 10 進浮動小数点定数は、SMALLINT、INTEGER、DECIMAL、または NUMERIC 列に使用してはなりません。10 進定数には、小数点より右方に、その列に指定された位取りより多くの桁を含めてはなりません。
USER
INSERT または UPDATE の時点での USER 特殊レジスターの値を、その列のデフォルト値として指定します。 列のデータ・タイプは、USER 特殊レジスターの長さ属性と同じかそれより 大きい長さ属性を持つ CHAR または VARCHAR でなければなりません。
NULL
その列のデフォルト値として NULL を指定します。 NOT NULL を指定する場合は、同じ列の定義 内で DEFAULT NULL を指定してはなりません。

データ・リンク列に使用できるデフォルト値は NULL のみです。

CURRENT_DATE
現在の日付を列のデフォルト値として指定します。 CURRENT_DATE を指定する場合は、列のデータ・タイプは DATE または DATE に基づく特殊タイプでなければなりません。
CURRENT_TIME
現在の時刻を列のデフォルト値として指定します。 CURRENT_TIME を指定する場合は、列のデータ・タイプは TIME または TIME に基づく特殊タイプでなければなりません。
CURRENT_TIMESTAMP または CURRENT_TIMESTAMP(integer)
現在のタイム・スタンプを列のデフォルト値として指定します。 CURRENT_TIMESTAMP を指定する場合は、列のデータ・タイプは TIMESTAMP また は TIMESTAMP に基づく特殊タイプでなければなりません。デフォルトとして使用される CURRENT_TIMESTAMP 特殊レジスター のタイム・スタンプ精度は、この特殊レジスターに指定された精度に関係なく、常に列のタイム・スタンプ精度と 一致します。
cast-function-name
この形式のデフォルト値は、特殊タイプやデータ・タイプ、BINARY、 VARBINARY、BLOB、 CLOB、DBCLOB、DATE、TIME または TIMESTAMP として定義された列でのみ使用することができます。 次の表は、これらのキャスト関数 の許可されている使用法を示します。
データ・タイプ キャスト関数名
BINARY、VARBINARY、BLOB、CLOB、または DBCLOB に基づく特殊タイプ N BINARY、VARBINARY、BLOB、CLOB、または DBCLOB *
DATE、TIME、または TIMESTAMP に基づく特殊タイプ N N (N の作成時に生成されたユーザー定義のキャスト関数) **

あるいは
DATE、TIME、または TIMESTAMP *

他のデータ・タイプに基づく特殊タイプ N (N の作成時に生成されたユーザー定義のキャスト関数) **
BINARY、VARBINARY、BLOB、CLOB、または DBCLOB BINARY、VARBINARY、BLOB、CLOB、または DBCLOB *
DATE、TIME、または TIMESTAMP DATE、TIME、または TIMESTAMP *
注 :

* 関数には、QSYS2 の暗黙的または明示的スキーマ名のデータ・タイプ (または、特殊タイプのソース・タイプ) の名前と一致する名前を指定する必要があります。

** 関数には、列の特殊タイプの名前と一致する名前を指定する必要があります。 スキーマ名で修飾する場合は、特殊タイプのスキーマ名と同じ名前 を指定する必要があります。修飾しない場合は、関数の解析から得られるス キーマ名は、特殊タイプのスキーマ名と同じ名前にする必要があります。

constant
定数を引数として指定します。この定数は、特殊タイプのソース・タイプの定数、あるいは、特殊タイプでない場合は、データ・タイプの定数の規則に準拠する必要があります。BINARY、VARBINARY、 BLOB、 CLOB、DBCLOB、DATE、TIME、および TIMESTAMP 関数の場合は、この定数をストリング定数にする必要があります。
USER
INSERT または UPDATE の時点での USER 特殊レジスターの値をその列 のデフォルト値として指定します。 この列の特殊タイプのソース・タイプのデータ・タイプは、USER 特殊 レジスターの長さ属性と同じかそれより大きい長さ属性を持つ CHAR また は VARCHAR でなければなりません。
CURRENT_DATE
現在の日付を列のデフォルト値として指定します。 CURRENT_DATE を指定する場合、列の特殊タイプのソース・タイプのデータ・タイプは、DATE にする必要があります。
CURRENT_TIME
現在の時刻を列のデフォルト値として指定します。 CURRENT_TIME を指定する場合、列の特殊タイプのソース・タイプのデータ・タイプは、TIME にする必要があります。
CURRENT_TIMESTAMP または CURRENT_TIMESTAMP(integer)
現在のタイム・スタンプを列のデフォルト値として指定します。 CURRENT_TIMESTAMP を指定する場合、列の特殊タイプのソース・タイプのデータ・タイプは、TIMESTAMP にする必要があります。デフォルトとして使用される CURRENT_TIMESTAMP 特殊レジスター のタイム・スタンプ精度は、この特殊レジスターに指定された精度に関係なく、常に列のタイム・スタンプ精度と 一致します。

指定した値が無効である場合、エラーが戻されます。

GENERATED
データベース・マネージャーが列の値を生成することを示します。列が次のいずれかのタイプの列であると見なされる場合には、GENERATED を指定できます。
  • ID 列
  • 行変更タイム・スタンプ列

変更の始まり列を次のいずれかのタイプの列に統合する場合には、GENERATED を指定する必要があります。変更の終わり

  • 変更の始まり行開始列変更の終わり
  • 変更の始まり行終了列変更の終わり
  • 変更の始まりトランザクション開始 ID 列変更の終わり
  • 変更の始まり生成式列変更の終わり
また、列のデータ・タイプが ROWID (または ROWID に基づく特殊タイプ) である場合も、GENERATED を指定できます。 その他の場合は、GENERATED を指定してはなりません。GENERATED は、列定義内に default-clause とともに指定してはなりません。in
ALWAYS
行の挿入時または更新時にデフォルト値を生成しなければならない場合に、データベース・マネージャーが常に列の値を生成することを指定します。ALWAYS は推奨値です。
BY DEFAULT
行の挿入時または更新時にデフォルト値を生成しなければならない場合に、明示的な値が指定されていない限り、データベース・マネージャーが列の値を生成することを指定します。

ROWID 列の場合は、データベース・マネージャーは指定された値を使用しますが、その値は、既にデータベース・マネージャーか DB2 for i によって生成されている有効な固有の行 ID の値でなければなりません。

ID 列または行変更タイム・スタンプ列の場合は、データベース・マネージャーは指定された値を挿入または更新しますが、その ID 列または行変更タイム・スタンプ列がユニーク制約を持っているか、その ID 列または行変更タイム・スタンプ列を単独で指定するユニーク索引を持っている場合を除き、その値がその列の固有な値であるかどうかの検査は行いません。

AS IDENTITY
列が表の識別列であることを指定します。 1 つの表は識別列を 1 つだけ持つことができます。 識別列は、分散表内で使用することはできません。AS IDENTITY を指定できるのは、列のデータ・タイプが、厳密に位取りがゼロの数値タイプ (SMALLINT、INTEGER、 BIGINT、DECIMAL、または位取りがゼロの NUMERIC、 またはこれらのデータ・タイプに基づく特殊タイプ) である場合だけです。 DECIMAL または NUMERIC データ・タイプが指定された場合、精度は 31 以下でなければなりません。

識別列は、暗黙的に NOT NULL になります。

START WITH数値定数
識別列について生成される最初の値を指定します。 小数点の右側にゼロ以外の数字がないことを条件として、この列に割り当てる ことのできる任意の正または負の値を指定できます。

識別列を定義するときに値を明示的に指定していない場合のデフォルト 値は、昇順の場合は MINVALUE で、降順の場合は MAXVALUE です。 この値は、シーケンスが最大値または最小値に達した後で、シーケンス の循環により到達する値になるとは限りません。 START WITH 文節を使用することにより、この循環に使用される値の範囲外の 値からシーケンスを開始することができます。 循環に使用する範囲は、MINVALUE および MAXVALUE で定義します。

INCREMENT BYnumeric-constant
識別列の連続した値の間隔を指定します。 この値は長整数定数の値を超過せず、かつ小数点の右側にゼロ以外の数字があってはなりません。 値は列に割り当て可能でなければなりません。 デフォルトは、1 です。

この値が 0 または正である場合は、識別列の値の順序は昇順になります。 この値が負の場合は、値の順序は降順になります。

MAXVALUE または MINVALUE
昇順の ID 列が循環するか値の生成を停止する最大値、または降順の ID 列が最小値に達した後で循環する先の最大値を指定します。
MAXVALUE numeric-constant
この ID 列用として生成される最大値を示す数値定数を指定します。 この値には、この列に割り当てることのできる任意の正または負の値を 指定できますが、最小値より大きい値でなければなりません。

識別列を定義するときにこの値を明示的に指定していない場合は、この 値は、昇順シーケンスの場合は該当データ・タイプの最大値になります。 降順シーケンスの場合は、この値は START WITH の値ですが、START WITH を指定していなければ -1 です。

MINVALUEnumeric-constant
この識別列用として生成される最小値を示す数値定数を指定します。 この値には、この列に割り当てることのできる任意の正または負の値を 指定できますが、最大値より小さい値でなければなりません。

識別列を定義するときにこの値を明示的に指定していない場合は、この 値は、昇順シーケンスの場合は START WITH の値ですが、START WITH を指定 していなければ 1 です。降順シーケンスの場合は、この値は、該当データ・ タイプ (および、DECIMAL の場合は精度) の最小値です。

CACHE または NO CACHE
事前割り振りの値をメモリー内に保持するかどうかを指定します。 値を事前に割り振ってキャッシュに保管しておくと、表に行を挿入する ときのパフォーマンスが向上します。
CACHE 整数
データベース・マネージャーが事前割り振りしてメモリー内に保持する、識別列シーケンスの値の数を指定します。指定できる最小の値は 2 で、最大の値は、1 つの整数で表せる最大の値です。 デフォルト値は 20 です。

システム障害のような特定の状態になると、キャッシュに保管されていてコミット済みステートメントでまだ使用されていない ID 列値はすべて失われるため、その後使用されることはありません。 CACHE オプションに指定する値は、こうした状態になった場合に失われる ID 列値の最大数です。

NO CACHE
識別列の値を事前割り振りしないことを指定します。
CYCLE または NO CYCLE
シーケンスの最大値または最小値に達した後も、この識別列について 値を生成し続けるかどうかを指定します。
CYCLE
最大値または最小値に達した後も、この列の値を生成し続けることを指定します。 このオプションを使用した場合は、昇順シーケンスがシーケンスの最大値に 達した後では、最小値が生成されます。 降順シーケンスがシーケンスの最小値に達した後は、最大値が生成されます。 列の最大値と最小値によって、循環に使用される範囲が決まります。

CYCLE が有効であるとき、データベース・マネージャーは ID 列に対して重複する値を生成する可能性があります。 対象の識別列について固有制約または固有索引が存在する場合は、固有でない 値が生成されるとエラーが起こります。

NO CYCLE
シーケンスの最大値または最小値に達した後は、この識別列について 値を生成しないことを指定します。 これはデフォルトです。
ORDER または NO ORDER
識別値を要求された順序で生成するかどうかを指定します。
ORDER
要求された順序で値を生成することを指定します。
NO ORDER
値を要求された順序で生成する必要がないことを指定します。 これはデフォルトです。
FOR EACH ROW ON UPDATE AS ROW CHANGE TIMESTAMP
列がタイム・スタンプであり、値はデータベース・マネージャーによって生成されることを指定します。 データベース・マネージャーは、行が挿入されるたびに各行の列に値を生成し、また列が更新されるたびに各行に値を生成します。 行変更タイム・スタンプ列に生成される値は、その行の挿入または更新の時刻に対応するタイム・スタンプです。1 つの SQL ステートメントを指定して複数の行が挿入される場合、行変更タイム・スタンプ列の値は、各行が挿入された時点を反映するために行ごとに異なる可能性があります。 生成された値が固有である保証はありません。
表には、行変更タイム・スタンプ列を 1 つだけ指定できます。データ・タイプ を指定 する場合は、精度 6 の TIMESTAMP であるか、または、精度 6 の TIMESTAMP に 基づく特殊タイプでなければなりません。行変更タイム・スタンプ列の場合、DEFAULT 節を指定することはできず、NOT NULL でなければなりません。
変更の始まりAS ROW BEGIN変更の終わり
変更の始まり列がタイム・スタンプ・データを含み、値がデータベース・マネージャーによって生成されることを指定します。データベース・マネージャーは、行が挿入されるたびに各行の列に値を生成し、また列が更新されるたびに各行に値を生成します。生成される値は、最新のトランザクションに関連付けられている開始時刻に対応するタイム・スタンプです。単一 SQL ステートメントで複数の行が挿入される場合、トランザクション開始タイム・スタンプ列の値は各行で同じになります。変更の終わり
変更の始まりシステム期間テンポラル表の場合、行開始列の値は、トランザクション全体にわたり固有になるようにデータベース・マネージャーによって生成されます。 関連した履歴表に挿入される行の終了タイム・スタンプ値が開始タイム・スタンプ値より大きくなるように、タイム・スタンプ値が調整される可能性があります。 これは、競合するトランザクションがシステム期間テンポラル表の同じ行を更新しているときに行われる場合があります。 このタイム・スタンプ値の調整を行うには、SYSTIME_PERIOD_ADJ QAQQINI オプションを *ADJUST に設定する必要があります。 単一の SQL トランザクション内で複数の行が挿入または更新され、調整が必要ではない場合、行開始列の値はすべての行において同じになり、別のトランザクションでその列のために生成された値とは異なる固有の値になります。 行開始列は、SYSTEM_TIME 期間の開始列として必要です。変更の終わり
変更の始まり1 つの表は 1 つの行開始列しか持てません。data-type が指定されない場合、 列は TIMESTAMP(12) として定義されます。data-type を指定する場合は、TIMESTAMP(12) でなければなりません。この列には DEFAULT 節を指定できないため、NOT NULL として定義する必要があります。行開始列は更新できません。変更の終わり
変更の始まりAS ROW END変更の終わり
変更の始まりこれを指定すると、行が挿入されるとき、または行内のいずれかの列が更新されるときには常に、データベース・マネージャーによって列のデータ・タイプの値が割り当てられます。 割り当てられる値は TIMESTAMP ’9999-12-30-0.00.00.000000000000’です。変更の終わり
変更の始まり行終了列は、SYSTEM_TIME 期間の 2 番目の列として必要です。変更の終わり
変更の始まり表には 1 つの行終了列のみを含めることができます。data-type が指定されない場合、 列は TIMESTAMP(12) として定義されます。data-type を指定する場合は、TIMESTAMP(12) でなければなりません。この列には DEFAULT 節を指定できないため、NOT NULL として定義する必要があります。行終了列は更新できません。変更の終わり
変更の始まりAS TRANSACTION START ID変更の終わり
変更の始まりこれを指定すると、行が表に挿入されるとき、または行のいずれかの列が更新されるときには常に、データベース・マネージャーによって値が割り当てられます。 データベース・マネージャーは、トランザクションごとに固有のタイム・スタンプ値、または NULL 値を割り当てます。 トランザクション開始 ID 列が NULL 可能で、値を調整する必要がない行開始列が表にある場合には、その列に NULL 値が割り当てられます。 それ以外の場合、この値は、次のいずれかの場合に時刻機構を読み取ることによって生成されます。(1) トランザクションの中で、表に含まれる行開始列またはトランザクション開始 ID 列に値を割り当てる必要があるようなデータ変更ステートメントを最初に実行するとき。(2) システム期間テンポラル表に含まれる行を削除するとき。 単一の SQL トランザクション内で複数の行が挿入または更新される場合、トランザクション開始 ID 列の値はすべての行において同じになり、別のトランザクションでその列のために生成された値とは異なる固有の値になります。変更の終わり
変更の始まりシステム期間テンポラル表にはトランザクション開始 ID 列が必要です。変更の終わり
変更の始まり1 つの表は 1 つのトランザクション開始 ID 列しか持てません。data-type が指定されない場合、 列は TIMESTAMP(12) として定義されます。data-type を指定する場合は、TIMESTAMP(12) でなければなりません。トランザクション開始 ID 列には DEFAULT 節を指定できません。 トランザクション開始 ID 列は更新できません。変更の終わり
変更の始まりDATA CHANGE OPERATION変更の終わり
変更の始まり挿入された各行、列が更新されたすべての行、および履歴表が ON DELETE ADD EXTRA ROW で定義されている場合にシステム期間テンポラル表から削除されたすべての行に、データベース・マネージャーが値を生成することを指定します。 列には、以下のいずれかの値が含まれます。
I
挿入操作
U
更新操作
D
削除操作
変更の終わり
変更の始まりdata-type が指定されない場合、 列は CHAR(1) として定義されます。data-type を指定する場合は、CHAR(1) でなければなりません。この列には、DEFAULT 文節もフィールド・プロシージャーも指定できません。変更の終わり
変更の始まりspecial-register変更の終わり
変更の始まり挿入された各行、列が更新されたすべての行、および履歴表が ON DELETE ADD EXTRA ROW で定義されている場合にシステム期間テンポラル表から削除されたすべての行に、データベース・マネージャーによって特殊レジスターの値が割り当てられることを指定します。 データ変更ステートメントの時点での特殊レジスターの値が使用されます。 単一の SQL ステートメントを使用して複数の行が変更される場合、列の値は、すべての行で同じになります。変更の終わり
変更の始まりdata-type は、以下の表に従って定義する必要があります。
特殊レジスター 列のデータ・タイプ
CURRENT CLIENT_ACCTNG VARCHAR(255)
CURRENT CLIENT_APPLNAME VARCHAR(255)
CURRENT CLIENT_PROGRAMID VARCHAR(255)
CURRENT CLIENT_USERID VARCHAR(255)
CURRENT CLIENT_WRKSTNNAME VARCHAR(255)
CURRENT SERVER VARCHAR(18)
SESSION_USER VARCHAR(128)
USER VARCHAR(18)
この列には、DEFAULT 文節もフィールド・プロシージャーも指定できません。変更の終わり
変更の始まりbuilt-in-global-variable変更の終わり
変更の始まり挿入された各行、列が更新されたすべての行、および履歴表が ON DELETE ADD EXTRA ROW で定義されている場合にシステム期間テンポラル表から削除されたすべての行に、データベース・マネージャーによって組み込みグローバル変数の値が割り当てられることを指定します。 データ変更ステートメントの時点での組み込みグローバル変数の値が使用されます。 単一の SQL ステートメントを使用して複数の行が変更される場合、列の値は、すべての行で同じになります。変更の終わり
変更の始まりdata-type は、以下の表に従って定義する必要があります。
組み込みグローバル変数 列のデータ・タイプ
QSYS2.JOB_NAME VARCHAR(28)
QSYS2.SERVER_MODE_JOB_NAME VARCHAR(28)
SYSIBM.CLIENT_HOST VARCHAR(255)
SYSIBM.CLIENT_IPADDR VARCHAR(128)
SYSIBM.CLIENT_PORT INTEGER
SYSIBM.PACKAGE_NAME VARCHAR(128)
SYSIBM.PACKAGE_SCHEMA VARCHAR(128)
SYSIBM.PACKAGE_VERSION VARCHAR(64)
SYSIBM.ROUTINE_SCHEMA VARCHAR(128)
SYSIBM.ROUTINE_SPECIFIC_NAME VARCHAR(128)
SYSIBM.ROUTINE_TYPE CHAR(1)
この列には、DEFAULT 文節もフィールド・プロシージャーも指定できません。変更の終わり
NOT NULL
列に NULL 値が入るのを防止します。NOT NULL を指定しないことは、その列が NULL であってもよいことを意味します。行変更タイム・スタンプ列変更の始まり、行開始列、および行終了列変更の終わりには、NOT NULL が必要です。
NOT HIDDEN
列が SQL ステートメントの表の暗黙的参照に組み込まれることを示します。これはデフォルトです。
IMPLICITLY HIDDEN
名前で明示的に参照されない限り、列は SQL ステートメントから不可視であることを示します。例えば、SELECT * は、結果に隠し列を含みません。 表には、少なくとも 1 つの IMPLICITLY HIDDEN でない列が含まれていなければなりません。
変更の始まりperiod-definition変更の終わり
変更の始まり
PERIOD FOR
表の期間を定義します。
SYSTEM_TIME (begin-column-name, end-column-name)
システム期間を SYSTEM_TIME という名前で定義します。 表内に名前 SYSTEM_TIME の列があってはなりません。表に指定できる SYSTEM_TIME 期間は 1 つのみです。
begin-column-name
行が有効である期間の開始を記録する列を指定します。この名前は、表内に存在する列を示すものでなければなりません。begin-column-name は、end-column-name と同じであってはなりません。begin-column-name は AS ROW BEGIN として定義する必要があります。
end-column-name
行が有効である期間の終了を記録する列を指定します。システム期間テンポラル表に関連付けられた履歴表で、システム期間テンポラル表の end-column-name に対応する履歴表の列はその行の削除を反映するように設定されます。この名前は、表内に存在する列を示すものでなければなりません。end-column-name は AS ROW END として定義する必要があります。
変更の終わり
column-constraint
CONSTRAINT constraint-name
制約の名前を指定します。 制約名 は、既に CREATE TABLE ステートメントで指定され、 かつ既に現行サーバーに存在している制約を示すものであってはなりません。

この文節の指定がない場合、固有制約の名前がデータベース・マネージャーによって生成されます。

PRIMARY KEY
これは、1 つの列からなる基本キーを定義する簡便な手段です。 列 C の定義に PRIMARY KEY を指定した場合、その効果は、別個の文節として PRIMARY KEY(C) 文節を指定したのと同一です。

この文節は複数の列の定義に指定してはなりません。また列の定義に UNIQUE 文節の指定がある場合には、この文節を指定してはなりません。この列は、LOB 列、DATALINK 列、または XML 列であってはなりません。ソート・シーケンスを指定する場合、 列にフィールド・プロシージャーを含めることはできません。

基本キーを追加すると、CHECK 制約が暗黙的に追加され、その基本キーを構成する列で NULL を使用することはできないという規則が適用されます。

UNIQUE
これは、1 つの列からなるユニーク制約を定義する簡便な手段です。 列 C の定義に UNIQUE の指定がある場合、その効果は、別個の文節として UNIQUE(C) 文節が指定された場合と同一です。

この文節は、1 つの列定義で複数回指定することはできません。また、列定義で PRIMARY KEY が指定されている場合は、この文節を指定してはなりません。この列は、LOB 列、DATALINK 列、または XML 列であってはなりません。ソート・シーケンスを指定する場合、 列にフィールド・プロシージャーを含めることはできません。

references-clause
列定義REFERENCES 文節 は、1 つの列から なる外部キーを定義する簡便な手段です。 列 C の定義に参照文節の指定がある場合、その効果は、C が識別された唯一の列である FOREIGN KEY 文節の一環としてその参照文節が指定されている場合と同一です。 表が宣言済みグローバル一時表、分散表、変更の始まりまたは履歴表変更の終わりである場合は、参照文節 を使用することはできません。 この列は、行変更タイム・スタンプ列であってはなりません。
CHECK(check-condition)
列定義 の CHECK(検査条件) は、単一の列のみを 参照する検査条件 を持つ検査制約を定義するための簡便な手段です。 したがって、列 C の列定義で CHECK を指定した場合、検査制約の検査 条件 では、C 以外の列を参照することができなくなります。結果は、 検査制約を別個の文節として指定した場合と同じです。

ON INSERT VIOLATION または ON UPDATE VIOLATION が指定される場合、これらの節の中で列 C が参照される必要があります。

CHECK 制約の中で、FILE LINK CONTROL 列を持つ ROWID、XML、および DATALINK を参照することはできません。その他の制限事項については、check-constraintを参照してください。

FIELDPROC
列のフィールド・プロシージャー出口ルーチンとして、外部プログラム名 を指定します。SQL が含まれていない ILE プログラムを指定する必要があります。 サービス・プログラムを指定することはできません。
このフィールド・プロシージャーは列の値のエンコードとデコードを行います。列に値が挿入されるときは、フィールド・プロシージャーに渡されてエンコードされて から挿入されます。列に入っている値が使用されるときは、フィールド・プロシージャーに渡されてデコードされてから使用されます。
フィールド・プロシージャーは、CREATE TABLE ステートメントの 処理中にも呼び出されます。この呼び出しの場合、プロシージャーは DB2 に列のフィールド記述を提供します。フィールド記述は、エンコードされた値のデータ特性を定義します。一方、CREATE TABLE ステートメントで列について指定する情報では、デコードされた値のデータ特性を定義します。
constant
フィールド・プロシージャーの呼び出し時にフィールド・プロシージャーに渡すパラメーターを指定します。パラメーター・リストはオプションです。
ROWID または DATALINK の列、あるいは ROWID または DATALINK に基づく特殊タイプの列でフィールド・プロシージャーを定義することはできません。この列は、ID 列、行変更タイム・スタンプ列変更の始まり、行開始列、行終了列、トランザクション開始 ID 列、および生成式列変更の終わりであってはなりません。この列に、CURRENT DATE、CURRENT TIME、CURRENT TIMESTAMP、USER のいずれかのデフォルト値が入っていてはなりません。フィールドのエンコード形式とデコード形式では、NULL 可能性属性が一致している必要があります。チェック条件でこの列を参照することはできません。ただし、NULL 述部で参照する場合は例外です。この列が外部キーの一部になっている場合は、対応する親キー列でも同じフィールド・プロシージャーを使用する必要があります。フィールド・プロシージャーを作成する方法の詳細については、『SQL プログラミング』を参照してください。
datalink-options
DATALINK データ・タイプに関連したオプションを指定します。
LINKTYPE URL
リンクのタイプを URL として定義します。
NO LINK CONTROL
これを指定すると、リンク済みファイルが存在するか否かを判別する ための検査は行われなくなります。URL の構文だけが検査されます。 リンク済みファイルに関してデータベース・マネージャー制御は行われません。
FILE LINK CONTROL
これを指定すると、リンク済みファイルの存在を確かめるための検査を行う必要が生じます。 追加のオプションを使用して、データベース・マネージャーにリンク済みファイルに対するより強力な制御権を与えることが可能です。

FILE LINK CONTROL が指定されると、各ファイルは一度だけリンクすることができます。 つまり、その URL を指定できるのは単一の表内の単一の FILE LINK CONTROL 列内だけです。

ファイル・リンク・オプション
リンク済みファイルのデータベース・マネージャー制御のレベルを定義する追加のオプションです。
INTEGRITY
DATALINK 値と実ファイルとの間のリンクの整合性レベルを指定します。
ALL
これを指定すると、DATALINK 値として指定されたどのファイルもデータベース・マネージャーに制御されるようになります。また、標準ファイル・システムのプログラミング・インターフェースを使用してそれらのファイルの削除または名前変更は行うことができなくなります。
READ PERMISSION
DATALINK 値に指定されたファイルの読み取り許可を決定する方法を指定します。
FS
これを指定すると、読み取りアクセス許可は、ファイル・システム許可によって決定されるようになります。 このようなファイルには、列からファイル名を検索しなくてもアクセスできます。
DB
これを指定すると、読み取りアクセス許可は、データベースによって決定されるようになります。 このファイルへのアクセスは、オープン操作において、表から DATALINK 値の検索時に戻される有効なファイル・アクセス・トークンを渡すことでしか許可されません。READ PERMISSION DB を指定する場合は、WRITE PERMISSION BLOCKED も指定する必要があります。
WRITE PERMISSION
DATALINK 値に指定されたファイルの書き込み許可を決定する方法を指定します。
FS
これを指定すると、書き込みアクセス許可は、ファイル・システム許可によって決定されるようになります。 このようなファイルには、列からファイル名を検索しなくてもアクセスできます。
BLOCKED
これを指定すると、書き込みアクセスがブロックされます。 ファイルは、どのインターフェースを介しても直接更新することはできません。 情報に対して更新を実行するには、代替メカニズムを使用する必要があります。 例えば、ファイルをコピーし、そのコピーを更新してから、その DATALINK 値を更新することで、そのファイルの新しいコピーを指し示します。
RECOVERY
この列の値で参照されるファイルの特定時点リカバリーをデータベース・マネージャーが サポートするか否かを指定します。
NO
これを指定すると、特定時点リカバリーはサポートされません。
ON UNLINK
DATALINK 値の変更または削除 (リンク解除) 時にファイルに対して講じるアクションを指定します。 これは、WRITE PERMISSION FS を使用している場合には適用できないことに注意してください。
RESTORE
これを指定すると、ファイルのリンクが解除されたら、データ・リンク・ファイル・マネージャーは、そのファイルを、それがリンクされた時点で存在していた許可と一緒に所有者に戻そうとします。 その所有者が既にファイル・サーバーへの登録を解除されている場合、この結果は、それらのファイルが収められているファイル・システムによって異なります。 それらのファイルが AIX® ファイル・システムにある場合の所有者は「dfmunknown」です。 IFS にある場合の所有者は QDLFM です。 これは、INTEGRITY ALL と WRITE PERMISSION BLOCKED も指定されている場合にのみ指定することができます。
DELETE
これを指定すると、ファイルは、リンク解除の時点で削除されます。 これは、READ PERMISSION DB と WRITE PERMISSION BLOCKED も指定されている場合にのみ指定することができます。
MODE DB2OPTIONS
このモードは、1 組のデフォルト・ファイル・リンク・オプションを定義します。 DB2OPTIONS によって定義されるデフォルト値は、次のとおりです。
  • INTEGRITY ALL
  • READ PERMISSION FS
  • WRITE PERMISSION FS
  • RECOVERY NO

LIKE

table-name または view-name
表の列の名前と記述が、 指定された表 (表名) またはビュー (ビュー名) の列とまったく同じであることを指定します。 この名前は、現行サーバーにある表またはビューを識別するものでなければなりません。

LIKE を使用すると、n 列を暗黙的に定義したことになります。ここで 、n は、指定した表またはビュー内の列の数です。 この暗黙の定義には、n 列の以下の属性が含まれます (そのデータ・タイプに該当する場合):

  • 列名 (および、システム列名)
  • データ・タイプ、長さ、精度、および位取り
  • CCSID
  • FIELDPROC (table-name のためにコピーされます)

表名 の直後に LIKE 文節を指定し、括弧で囲まなかった場合 は、以下の列属性も含まれます。その他の場合は、これらの属性は含まれません (デフォルト値、識別、行変更タイム・スタンプ、および隠し属性は、コピー・オプションを使用して制御することもできます)。

  • デフォルト値 (表名 が指定され、ビュー名 は指定されていない場合)
  • NULL 可能性
  • 隠し属性
  • 列の見出しとテキスト (LABELを参照)

列の REFFLD 情報 は、新しい列定義にコピーされます。

変更の始まりtable-name に行変更タイム・スタンプ列、行開始列、行終了列、トランザクション開始 ID 列、または生成式列が含まれている場合、新しい表の対応する列はソース列のデータ・タイプのみを継承します。 この新しい列は、生成された列とは見なされません。変更の終わり

暗黙の定義には、識別された表またはビューのその他のオプション属性は含 まれません。例えば、新しい表に基本キー、外部キー、トリガー、または変更の始まり期間変更の終わりが自動的に組み込まれることはありません。 新規の表にこうしたオプション属性が組み込まれるのは、オプション文節を 明示的に指定した場合に限られます。

指定された表またはビューが非 SQL 作成の物理ファイルまたは論理ファ イルの場合、非 SQL 属性は除去されます。例えば、日付と時刻の形式は ISO 形式に変更されます。

copy-options

INCLUDING IDENTITY COLUMN ATTRIBUTES または EXCLUDING IDENTITY COLUMN ATTRIBUTES
ID 列の属性を継承するかどうかを指定します。
INCLUDING IDENTITY COLUMN ATTRIBUTES
この表が、選択ステートメント表名、また はビュー名 の結果として生じる列の識別属性 (もしあれば) を 継承することを指定します。 一般に、識別属性がコピーされるのは、表、ビュー、または選択ステートメント の中の対応する列のエレメントが、識別属性を持つ基本表列の名前に直接または間接にマップされる表列またはビュー列の名前である場合です。 INCLUDING IDENTITY COLUMN ATTRIBUTES 文節と AS 選択ステートメント 文節を 指定してあるときは、以下の場合には新規の表の列は識別属性を継承しません。
  • 選択ステートメント の選択リストに、ID 列名の複数の インスタンスが含まれている (つまり同じ列を複数回選択している) 場合。
  • 選択ステートメント の選択リストに、複数の ID 列が含まれ ている (つまり結合が含まれている) 場合。
  • 選択リスト内の式のいずれかに ID 列が含まれている場合。
  • 選択ステートメント に一組の演算 (UNION または INTERSECT) が含まれている場合。

INCLUDING IDENTITY を指定しなかった場合は、表には ID 列は含まれません。

EXCLUDING IDENTITY COLUMN ATTRIBUTES
この表が、全選択表名、または ビュー名 の結果として生じる列の識別属性を継承しないことを指定します。
EXCLUDING COLUMN DEFAULTS または INCLUDING COLUMN DEFAULTS または USING TYPE DEFAULTS
列のデフォルトを継承するかどうかを指定します。
EXCLUDING COLUMN DEFAULTS
ソース表の定義から列のデフォルトを継承しないことを指定します。 新しい表の列のデフォルト値は NULL になるか、またはデフォルト値がなくなります。 列を NULL にできる場合、デフォルトは NULL 値になります。 列を NULL にできない場合はデフォルト値がなくなるため、新しい表に対する INSERT で列の値が指定されない場合はエラーが発生します。
INCLUDING COLUMN DEFAULTS
この表が、選択ステートメント表名、また はビュー名 から生じる列のデフォルト値を継承することを指定します。 デフォルト値は、INSERT で値が指定されていない場合に、列に割り当てられる値です。

USING TYPE DEFAULTS を指定する場合は、INCLUDING COLUMN DEFAULTS を指定しないでください。

INCLUDING COLUMN DEFAULTS を指定しなかった場合は、デフォルト値は継承されません。

USING TYPE DEFAULTS
この表のデフォルト値が、選択ステートメント表名、また はビュー名 から生じる列のデータ・タイプに応じて決まることを指定します。 その列がNULL 可能である場合は、デフォルト値は NULL 値です。 その他の場合は、デフォルト値は以下のようになります。
データ・タイプ デフォルト値
数値 0
固定長文字またはグラフィック・ストリング ブランク
固定長バイナリー・ストリング 16 進ゼロ
可変長ストリング 0 のストリング長
日付 INSERT の時点の当日の日付
時刻 INSERT の時点の当日の時刻
タイム・スタンプ INSERT の時点の当日のタイム・スタンプ
データ・リンク DLVALUE('','URL','') に対応する値
XML デフォルト値はありません
特殊タイプ 特殊タイプの対応するソース・タイプのデフォルト値

INCLUDING COLUMN DEFAULTS を指定する場合は、USING TYPE DEFAULTS は指定しないでください。

INCLUDING IMPLICITLY HIDDEN COLUMN ATTRIBUTES または EXCLUDING IMPLICITLY HIDDEN COLUMN ATTRIBUTES
暗黙的な隠し列を継承するかどうかを指定します。
INCLUDING IMPLICITLY HIDDEN COLUMN ATTRIBUTES
この表が、選択ステートメント表名、または ビュー名から暗黙的な隠し列を継承することを示します。また、これらの列は、新規の表の暗黙的隠し属性を使用して定義されます。

INCLUDING IMPLICITLY HIDDEN COLUMN ATTRIBUTES を指定しない場合、表は、暗黙的な隠し列を持ちません。

EXCLUDING IMPLICITLY HIDDEN COLUMN ATTRIBUTES
表が、全選択表名、または ビュー名 から、暗黙的な隠し列を継承しないことを指定します。
INCLUDING ROW CHANGE TIMESTAMP COLUMN ATTRIBUTES または EXCLUDING ROW CHANGE TIMESTAMP COLUMN ATTRIBUTES
行変更タイム・スタンプ属性が継承されるかどうかを指定します。
INCLUDING ROW CHANGE TIMESTAMP COLUMN ATTRIBUTES
この表が、選択ステートメント表名、また はビュー名 の結果として生じる列の行変更タイム・スタンプ属性 (もしあれば) を継承することを指定します。 一般に、行変更タイム・スタンプ属性がコピーされるのは、表、ビュー、または選択ステートメント の中の対応する列のエレメントが、行変更タイム・スタンプ属性を指定する基本表列の名前に直接または間接にマップされる表列またはビュー列の名前である場合です。 INCLUDING ROW COLUMN ATTRIBUTES 文節と AS 選択ステートメント 文節を 指定してあるときは、以下の場合には新規の表の列は、行変更タイム・スタンプ属性を継承しません。
  • 選択ステートメント の選択リストに、行変更タイム・スタンプ列名の複数インスタンスが含まれている (つまり同じ列を複数回選択している) 場合。
  • 選択ステートメント の選択リストに、複数の行変更タイム・スタンプ列が含まれている (つまり結合が関与している) 場合。
  • 選択リスト内の式に行変更タイム・スタンプ列が含まれている場合。
  • 選択ステートメント に一組の演算 (UNION または INTERSECT) が含まれている場合。

INCLUDING ROW CHANGE TIMESTAMP COLUMN ATTRIBUTES を指定しない場合、表は、行変更タイム・スタンプ列を持ちません。

EXCLUDING ROW CHANGE TIMESTAMP COLUMN ATTRIBUTES
この表が、全選択表名、またはビュー名 の結果として生じる列の行変更タイム・スタンプ属性 (もしあれば) を継承しないことを指定します。

as-result-table

column-name
表の列の名前を指定します。列名のリストを指定する場合は、そのリストは、選択ステートメント の結果表にある列の数と同じ数の列名で構成されている必要があります。 各 column-name (列名) は、ユニークで、しかも非修飾でなければなりません。 列名のリストを指定しなかった場合、表の列は選択ステートメント の結果表の列の名前を継承します。

選択ステートメント の結果表に重複する列名または無名列がある場合は、列名のリストを指定する必要があります。 無名列は、定数、関数、式、またはセット演算 (UNION または INTERSECT) から生じる名前のない列で、この列には選択リストの AS 文節が使用されます。

FOR COLUMN システム列名
列の IBM i 名を指定します。表の複数の列やシステム列名に対して、同じ名前を使用してはなりません。

システム列名 が指定されず、また列名が有効なシステム列名 でない場合には、システム列名が生成されます。 システム列名の生成方法に関する詳細については、表名の生成の規則を参照してください。

選択ステートメント
表の列の名前および記述を、選択ステートメント を実行した場合 に選択ステートメント の派生結果表に現れる列と同じにすることを指定します。 AS (選択ステートメント) を使用すると、この表について n 個の列を暗黙的に定義したことになります。n は、選択ステートメント の結果として発生する列の数です。

この暗黙の定義には、n 列の以下の属性が含まれます (そのデータ・タイプに該当する場合):

変更の始まり
  • 列名 (および、システム列名)
  • データ・タイプ、長さ、精度、および位取り
  • CCSID
  • NULL 可能性
  • FIELDPROC
  • 列の見出しとテキスト (LABELを参照)
変更の終わり

以下の属性は組み込まれません (変更の始まり一部の属性変更の終わりは、copy-options を使用して組み込むことができます)。

  • デフォルト値
  • 非表示属性
  • 識別属性
  • 行変更タイム・スタンプ属性
  • 変更の始まり行開始、行終了、およびトランザクション開始 ID変更の終わり
  • 変更の始まり生成式変更の終わり

暗黙の定義には、識別された表またはビューのその他のオプション属性は含 まれません。例えば、新規の表には、表からの基本キーや外部キーは自動的には組み込 まれません。新規の表にこうしたオプション属性が組み込まれるのは、オプション文節を 明示的に指定した場合に限られます。

選択文節 に 含まれる列で、別の表またはビュー内の列への直接参照であるか、結果属性を変更するための CAST のみを 使用している列には、ファイル・オブジェクト内の定義のために生成される REFFLD 情報 が入ります。

select-statement は変数を参照してはなりません が、グローバル変数を参照することはできます。

選択ステートメント には、PREVIOUS VALUE 式または NEXT VALUE 式を含めてはなりません。UPDATE、SKIP LOCKED DATA、USE AND KEEP EXCLUSIVE LOCKS の各文節を指定することはできません。

select-statementisolation-clause を含む場合、isolation-clause で指定された分離レベルが SQL ステートメント全体に適用されます。

WITH DATA
選択ステートメント を実行することを指定します。 表の作成後に、選択ステートメント の結果表の行が自動的に表に挿入されます。
WITH NO DATA
選択ステートメント を新しい表の属性を定義する目的のみに使用することを指定します。 選択ステートメント の結果を使用した表へのデータの挿入は行われません。

unique-constraint

CONSTRAINT constraint-name
制約の名前を指定します。 制約名 は、既に CREATE TABLE ステートメントで指定され、 かつ既に現行サーバーに存在している制約を示すものであってはなりません。

この文節の指定がない場合、固有制約の名前がデータベース・マネージャーによって生成されます。

PRIMARY KEY (column-name,…)
指定した列で構成される基本キーを定義します。表は基本キーを 1 つだけ持つことができます。 したがって、この文節は複数回指定することはできず、またこの簡便な手法が表の基本キーを定義するのに使用されていた場合には、指定することはできません。指定する列は、その CREATE TABLE ステートメントで前に指定した他の UNIQUE 制約で指定されている列と同じであってはなりません。 例えば、UNIQUE(B,A) が既に指定されている場合、PRIMARY KEY(A,B) の指定は許されません。

それぞれの column-name は、該当の表の列を識別する非修飾の名前でなければなりません。同じ列を複数回指定することはできません。この列は、LOB 列、DATALINK 列、または XML 列であってはなりません。ソート・シーケンスを指定する場合、列にフィールド・プロシージャーを含めることはできません。指定できる列の数は 120 を超えてはならず、それぞれのバイト・カウントの合計は 32766-n を超えてはなりません。ここで、n は NULL が許されると指定された列の数です。バイト数については、表 1 を参照してください。

固有索引は、別個のシステム論理ファイルとしてではなく、システム物理 ファイルの一部として作成されます。基本キーを追加すると、CHECK 制約が 暗黙的に追加され、その基本キーを構成するどの列でも NULL を使用するこ とはできないという規則が適用されます。

UNIQUE (column-name,…)
識別された列で構成されるユニーク制約を定義します。 UNIQUE 文節は複数回指定しても構いません。 指定する列は、その CREATE TABLE ステートメントで前に指定した他の UNIQUE 制約や PRIMARY KEY で指定されている列と同じであってはなりません。 ある固有制約が他の制約の指定と同一であるか否かを判別するには、その列のリストを対比します。例えば、UNIQUE(A,B) は UNIQUE(B,A) と同一です。

それぞれの column-name は、該当の表の列を識別する非修飾の名前でなければなりません。同じ列を複数回指定することはできません。この列は、LOB 列、DATALINK 列、または XML 列であってはなりません。ソート・シーケンスを指定する場合、列にフィールド・プロシージャーを含めることはできません。指定できる列の数は 120 を超えてはならず、それぞれのバイト・カウントの合計は 32766-n を超えてはなりません。ここで、n は NULL が許されると指定された列の数です。バイト数については、表 1 を参照してください。

指定された列に基づく固有索引が、その CREATE TABLE ステートメントの実行過程で作成されます。 固有索引は、別個のシステム論理ファイルとしてではなく、システム物理ファイルの一部として作成されます。

referential-constraint

CONSTRAINT constraint-name
制約の名前を指定します。 制約名 は、既に CREATE TABLE ステートメントで指定され、 かつ既に現行サーバーに存在している制約を示すものであってはなりません。

この文節の指定がない場合、固有制約の名前がデータベース・マネージャーによって生成されます。

FOREIGN KEY
FOREIGN KEY 文節を指定するたびに、参照制約が定義されます。表が宣言済みグローバル一時表または分散表である場合、FOREIGN KEY を使用することはできません。
(column-name,…)
参照制約の外部キーは、指定した列で構成されます。それぞれの column-name は、該当の表の列を識別する非修飾の名前でなければなりません。同じ列を複数回指定することはできません。この列は、LOB 列、DATALINK 列、または XML 列であってはならず、また行変更タイム・スタンプ列であってもなりません。ソート・シーケンスを指定する場合、列にフィールド・プロシージャーを含めることはできません。指定できる列の数は 120 を超えてはならず、その長さの合計は 32766-n を超えてはなりません。ここで、n は NULL が許されると指定された列の数です。
REFERENCES table-name
REFERENCES 文節で指定する表名 は、アプリケーション・サーバー上に作成される表か既に存在している基本表を示すものでなければなりませんが、カタログ表、宣言済み一時表、分散表、変更の始まりまたは履歴表変更の終わりを示すものであってはなりません。親がパーティション表の場合は、親のユニーク制約を適用するユニーク索引がパーティション化されていてはなりません。

参照制約の外部キー、親キー、および親表が、前に指定した参照制約の外部キー、親キー、および親表と同一である場合は、その参照制約は重複 します。 重複する参照制約は許されますが、お勧めできません。

以下の説明で、T1 は作成される表を指し、T2 は識別された親表を表しています。

指定した外部キーは、T2 の親キーと同じ数の列を持たなければなりません。 外部キーの n 番目の列の記述とその親キーの n 番目の列の記述は、同一のデータ・タイプ、長さ、CCSID、および FIELDPROC を持たなければなりません。

(column-name,…)
参照制約の親キーは、ここで指定する列によって構成されます。 各 column-name は、T2 の列を指定する非修飾名でなければなりません。 同じ列を複数回指定することはできません。この列は、LOB 列、DATALINK 列、または XML 列であってはならず、また行変更タイム・スタンプ列であってもなりません。ソート・シーケンスを指定する場合、列にフィールド・プロシージャーを含めることはできません。指定できる列の数は 120 を超えてはならず、それぞれのバイト・カウントの合計は 32766-n を超えてはなりません。ここで、n は NULL が許されると指定された列の数です。バイト数については、表 1 を参照してください。

この列名のリストは、T2 の基本キーまたは T2 に存在する UNIQUE 制約の列名のリストと同一でなければなりません。 名前は、基本キーと同じ順序で指定する必要はありません。しかし、外部キー 文節の列のリストに対応する順序で指定する必要があります。 列名のリストの指定がない場合、T2 は基本キーを持たなければなりません。列名のリストの省略は、基本キーの列の暗黙の指定を意味しています。

FOREIGN KEY 文節によって指定される参照制約は、T2 が親表で、T1 がその従属表である関係を定義します。

ON DELETE
親表の行が削除される時点で、従属表について行うアクションを指定します。 可能なアクションには以下の 5 つがあります。
  • NO ACTION (デフォルト)
  • RESTRICT
  • CASCADE
  • SET NULL
  • SET DEFAULT

外部キーの列に NULL が許される列がある場合を除いて、SET NULL を指定してはなりません。

FILE LINK CONTROL を指定した DATALINK 列が T1 に含まれる場合には、CASCADE を指定してはなりません。

削除規則は、T2 の行が DELETE または波及削除操作の対象で、しかもその行が T1 に従属する行を持っている場合に適用されます。 p は、そのような T2 の行を表すと想定します。

  • RESTRICT または NO ACTION を指定した場合、エラーが生じ、行の削除は行われません。
  • CASCADE を指定すると、 T1 の p の従属行に削除操作が伝搬します。
  • SET NULL が指定された場合、T1 の p のそれぞれの従属行の外部キーの NULL 可能な列が NULL 値に設定されます。従属表がパーティション化された表である場合や外部キーの列がパーティション・キーの場合も、SET NULL を使用することはできません。
  • SET DEFAULT を指定した場合、T1 の p の各従属行の外部キーの各列は、そのデフォルト値に設定されます。SET DEFAULT は、従属表がパーティション化された表であり、外部キー列もパーティション・キー である場合は、デフォルトで同じパーティションに行が 保持される場合を除いて、使用することはできません。
ON UPDATE
親表の行が更新される時点で、従属表で行うアクションを指定します。

更新規則は、T2 の行が UPDATE または波及更新操作の対象で、しかもその行が T1 に従属行を持つ場合に適用されます。 p は、そのような T2 の行を表すと想定します。

  • RESTRICT または NO ACTION を指定した場合、エラーが生じ、行の更新は行われません。

check-constraint

CONSTRAINT constraint-name
検査制約の名前を指定します。 制約名 は、既に CREATE TABLE ステートメントで指定され、 かつ既に現行サーバーに存在している制約を示すものであってはなりません。

この文節の指定がない場合、固有制約の名前がデータベース・マネージャーによって生成されます。

CHECK (check-condition)
検査制約を定義します。どのような場合も、検査条件 は、表の行ごとに真か不明にする必要があります。

検査条件 は、検索条件 です。ただし、次の条件は除きます。

  • 表の列だけを参照することができます。
  • check-condition で指定する式の結果を、ROWID、XML の各データ・タイプ、または FILE LINK CONTROL を伴う DATALINK データ・タイプにすることはできません。
  • 次のいずれも含めることはできません。
    • 副照会
    • 集約関数
    • 変数
    • グローバル変数
    • パラメーター・マーカー
    • シーケンス参照
    • LOB を含む複合式 (連結など)
    • OLAP の指定
    • ROW CHANGE 式
    • REGEXP_LIKE 述部
    • 特殊レジスター
    • 特殊タイプの作成に伴って暗黙に生成された関数以外のユーザー定義関数
    • 以下の組み込みスカラー関数:
ON INSERT VIOLATION
挿入される行の check-condition が false の場合の処置 を指定します。この節が指定されていないと、 挿入の check-condition が false の場合はエラーが発生します。
SET column-name = DEFAULT
挿入操作で提供される値の代わりに、column-name のデフォルト値が表に 挿入されます。

column-namecheck-condition 内で参照されている必要があります。

ON UPDATE VIOLATION
更新される行に対する check-condition が false の場合の処置 を指定します。この節が指定されていないと、 更新の check-condition が false の場合はエラーが発生します。
PRESERVE column-name
column-name の現行値は、更新操作によって提供される値で置き換えられるのではなく、表に 残ります。

column-namecheck-condition 内で参照されている必要があります。

検索条件の詳細については、検索条件を参照してください。 LOB データ・タイプおよび式が含まれる検査制約について詳しくは、「データベース・プログラミング」トピック集を参照してください。

NOT LOGGED INITIALLY

このステートメントによって作成された表に対して同一作業単位内の INSERT、 DELETE、または UPDATE ステートメントによって行われた変更は、ログ (ジャーナル) に記録されません。

現行作業単位の完了時に NOT LOGGED INITIALLY 属性が非活動化され、後続の作業単位で表に対して行われるすべての操作はログ (ジャーナル) に記録されます。

この NOT LOGGED INITIALLY オプションは、代替ソース (別の表またはファイル) のデータを使用して大きい結果セットを作成する必要があり、かつ表のリカバリーが不要である場合に役立ちます。 このオプションを使用すると、データのロギング (ジャーナリング) のオーバーヘッドを節約できます。

表に FILE LINK CONTROL が指定された DATALINK 列 がある場合、ACTIVATE NOT LOGGED INITIALLY は無視されます。

VOLATILE または NOT VOLATILE

表名 のカーディナリティーを実行時に大きく変えることができるかをオプティマイザーに示します。揮発性は表の行数に適用され、表そのものに適用されるわけではありません。 デフォルトは NOT VOLATILE です。

VOLATILE
実行時に表名 のカーディナリティーを空から大規模に大きく変えることができることを指定します。 オプティマイザーは表にアクセスするとき、可能であれば通常は索引を使用します。
NOT VOLATILE
table-name のカーディナリティーが揮発性でないことを指定します。 この表を参照するアクセス・プランは、アクセス・プランが構築された時点の表のカーディナリティーに基づいたものになります。 NOT VOLATILE がデフォルトです。

RCDFMT

表のレコード・フォーマット名を示します。

RCDFMT format-name
表の IBM i レコード・フォーマット名を指定する非修飾名です。 format-name は、システム ID です。

レコード・フォーマット名が指定されない場合、format-name は、表の system-object-name と同一のものになります。

media-preference

表またはパーティションの優先ストレージ・メディアを指定します。

UNIT ANY
どのストレージ・メディアも優先しません。使用可能なストレージ・メディアであればどのストレージ・メディアからでも表またはパーティションのストレージが割り振られます。表で UNIT ANY を指定すると、パーティションで指定する media-preference が使用されます。
UNIT SSD
ソリッド・ステート・ディスク・ストレージ・メディア を優先します。ソリッド・ステート・ディスクのストレージ・メディアが使用可能になっていれば、そのソリッド・ステート・ディスクのストレージ・メディアから表またはパーティションのストレージが割り振られます。 表で UNIT SSD を指定すると、パーティションで指定する media-preference は無視されます。

memory-preference

KEEP IN MEMORY
表のデータ が照会で使用されるときに、データを主記憶域プールに入れるかどうかを指定します。
NO
データは主記憶域プールに入れられません。
YES
データは主記憶域プールに入れられます。
変更の始まり

ON REPLACE

現行サーバーに存在する表を置き換える場合の処置を指定します。 既存の表が置換されない場合、このオプションは無視されます。

PRESERVE ALL ROWS
指定された表の現在の行が保持されます。 WITH DATA が result-table-as で指定されている場合、PRESERVE ALL ROWS は使用できません。

パーティション化された表内のすべてのパーティションのすべての行が保持されます。 新しい表定義が範囲パーティション化された表の場合、定義された範囲は既存のパーティションのすべての行を含むことができなければなりません。

列が除去された場合、その列値は保持されません。 列が変更された場合、その列値を変更することができます。

表がパーティション化された表ではない場合、またはハッシュ・パーティション化された表である場合、PRESERVE ALL ROWS と PRESERVE ROWS は等価です。

PRESERVE ROWS
指定された表の現在の行が保持されます。 WITH DATA が result-table-as で指定されている場合、PRESERVE ROWS は使用できません。

範囲パーティション化された表のパーティションが除去された場合、そのパーティションの行は、削除トリガーを処理せずに削除されます。 範囲パーティション化された表のパーティションが除去されるかどうかを判別するために、新しい表定義内のパーティションの範囲定義とパーティション名 (もしあれば) が既存の表定義のパーティションと比較されます。 パーティションの指定された範囲または名前のいずれかが一致すると、それが保持されます。 パーティションに partition-name がない場合、その boundary-spec は、既存のパーティションと一致しなければなりません。

ハッシュ・パーティション表のパーティションが除去された場合、そのパーティションの行は保持されます。

列が除去された場合、その列値は保持されません。 列が変更された場合、その列値を変更することができます。

DELETE ROWS
指定された表の現在の行が削除されます。 既存の DELETE トリガーは起動されません。
表がシステム期間テンポラル表または履歴表の場合、DELETE ROWS は使用できません。
変更の終わり

distribution-clause

IN NODEGROUP nodegroup-name
この表のデータが分散されるノード・グループを指定します。 この名前は、現行サーバーに存在するノード・グループを 示すものでなければなりません。この文節を指定すると、表は、そのノード・グループのシステムすべて にわたる分散表として作成されます。

LOB 列、DATALINK 列、XML 列、または IDENTITY 列は、分散表内で使用することはできません。

分散表を作成するには、DB2 マルチシステム・プロダクトをインストールする必要があります。 分散表の詳細については、「DB2 UDB for iSeries マルチ・システム」トピック集を参照してください。

DISTRIBUTE BY HASH (column-name,…)
パーティション・キーを指定します。 パーティション・キーは、ノード・グループのどのノードに行を置くかを判別するために使用します。 それぞれの column-name は、該当の表の列を識別する非修飾の名前でなければなりません。同じ列を複数回指定することはできません。 DISTRIBUTE BY 文節の指定がない場合、基本キーの最初の列が、パーティション・キーとして使用されます。 基本キーがない場合は、表の最初の列で、浮動小数点、日付、時刻、 あるいはタイム・スタンプではない列が、パーティション・キーとして使用されます。

パーティション・キーを構成する列は、 その表に対して固有の制約を構成する列のサブセットでなければなりません。パーティション・キーでは、浮動小数点、 日付、時刻、タイム・スタンプ、LOB、XML、DataLink、 ROWID、および、フィールド・プロシージャーがある列を使用することは できません。

partitioning-clause

PARTITION BY RANGE
表に行を挿入する場合、ターゲット・データのパーティションの判別に列値の範囲を使用することを指定します。パーティションの数は、256 以下でなければなりません。
partition-expression
データのターゲット・データ・パーティションを決定するために範囲を定義する対象のキー・データを指定します。
column-name
データ・パーティション・キーの列を識別します。パーティション・キーは、表内のどのパーティションに行を置くかを判別するために使用します。 column-name は、該当の表の列を識別する非修飾の名前でなければなりません。同じ列を複数回指定することはできません。

パーティション・キーでは、LOB、XML、DataLink、ROWID、 行変更タイム・スタンプ列、ID 列、および、フィールド・プロシージャーのある列を 使用することはできません。

指定する列数は 120 を超えてはなりません。列の長さ属性の合計が 2000 を超えてはなりません。

NULLS LAST
NULL 値の比較順位を上位に設定することを指定します。
NULLS FIRST
NULL 値の比較順位を下位に設定することを指定します。
partition-element
データ・パーティション・キーの範囲を指定します。
PARTITION partition-name
データ・パーティションに名前を付けます。表の他のデータ・パーティションと同じ名前を指定することはできません。

この文節の指定がない場合、固有のパーティション名がデータベース・マネージャーによって生成されます。

boundary-spec
範囲パーティションの境界を指定します。 複数のパーティション・キーが指定された場合、境界は昇順で指定されなければなりません。 範囲はオーバーラップしてはなりません。
starting-clause
データ・パーティションの範囲の下限を指定します。 指定された開始値の数値は、パーティション化キーの列の値と同じでなければなりません。 最初の boundary-specstarting-clause を指定しない場合は、パーティション・キーの各列で MINVALUE INCLUSIVE がデフォルトとして使用されます。後続の boundary-specstarting-clause を指定しない場合は、直前の隣接する boundary-specending-clause を組み込む必要があります。 デフォルトは、その ending-clause と同じです (ただし、INCLUSIVE 属性または EXCLUSIVE 属性が逆になります)。
STARTING FROM
この後に、starting-clause を指定します。
constant
パーティション・キーの対応する列のデータ・タイプの定数の規則に準拠する定数を指定します。 この定数は、パーティション・キーの対応する列が特殊タイプでない場合は、 特殊タイプのソース・タイプの規則に準拠する必要があります。 この値は、表の他の境界スペック の範囲内であってはなりません。
MINVALUE
対応する column-name のデータ・タイプで有効な最小値より小さい値を指定します。MINVALUE を指定した場合、開始文節 内の後続のすべての値も MINVALUE でなければなりません。
MAXVALUE
対応する column-name のデータ・タイプで有効な最大値より大きい値を指定します。MAXVALUE を指定した場合、終了文節 内の後続のすべての値も MAXVALUE でなければなりません。
INCLUSIVE
指定した範囲値をデータ・パーティションに含めることを示します。
EXCLUSIVE
指定した範囲値をデータ・パーティションから除外することを示します。MINVALUE または MAXVALUE が指定されている場合、この指定は無視されます。
ending-clause
データ・パーティションの範囲の上限を指定します。 指定された終了値の数値は、データ・パーティション化キーの列の値と同じでなければなりません。 最後の boundary-spec では、ending-clause を指定する必要があります。前の boundary-specending-clause を指定しない場合は、後続の隣接する boundary-specstarting-clause を組み込む必要があります。デフォルトは、その starting-clause と同じです (ただし、INCLUSIVE 属性または EXCLUSIVE 属性が逆になります)。
ENDING AT
この後に、ending-clause を指定します。
constant
パーティション・キーの対応する列のデータ・タイプの定数の規則に準拠する定数を指定します。 この定数は、パーティション・キーの対応する列が特殊タイプでない場合は、 特殊タイプのソース・タイプの規則に準拠する必要があります。 この値は、表の他の境界スペック の範囲内であってはなりません。
MINVALUE
対応する column-name のデータ・タイプで有効な最小値より小さい値を指定します。MINVALUE を指定した場合、開始文節 内の後続のすべての値も MINVALUE でなければなりません。
MAXVALUE
対応する column-name のデータ・タイプで有効な最大値より大きい値を指定します。MAXVALUE を指定した場合、終了文節 内の後続のすべての値も MAXVALUE でなければなりません。
INCLUSIVE
指定した範囲値をデータ・パーティションに含めることを示します。
EXCLUSIVE
指定した範囲値をデータ・パーティションから除外することを示します。MINVALUE または MAXVALUE が指定されている場合、この指定は無視されます。
EVERY 整数定数
複数のデータ・パーティションが、 整数定数 が各データ・パーティションの範囲の幅を指定する場所に追加されることを指定します。 EVERY が指定された場合、パーティション・キーに指定できるのは単一の SMALLINT、INTEGER、 BIGINT、DECIMAL、NUMERIC、DATE、または TIMESTAMP 列のみです。

最初のデータ・パーティションの開始値が、指定された STARTING 値になります。 以前のパーティション + 整数定数 の開始値が、後続の各パーティションの開始値になります。 開始文節 が EXCLUSIVE を指定した場合、各パーティションの開始値は EXCLUSIVE になります。 そうでない場合、各パーティションの開始値は INCLUSIVE になります。

変更の始まり範囲の各パーティションの終了値は (パーティションの開始値 + 整数定数) になります。 ending-clause が EXCLUSIVE を指定した場合、最後のパーティションの終了値は EXCLUSIVE になります。 そうでない場合、最後のパーティションの終了値は INCLUSIVE になります。 開始値が INCLUSIVE の場合、その他のパーティションの終了値は EXCLUSIVE になります。 そうでない場合、その他のパーティションの終了値は INCLUSIVE になります。変更の終わり

追加するパーティションの数は、 ENDING 値に達するまで整数定数 を繰り返し STARTING 値に追加することによって判別されます。 例えば次のようなものがあります。

  CREATE TABLE FOO
    (A  INT)
    PARTITION BY RANGE(A)
      (STARTING(1) ENDING(10) EVERY(2))

上記は、次の CREATE TABLE ステートメントと等価です。

  CREATE TABLE FOO
    (A  INT)
    PARTITION BY RANGE(A)
      (STARTING(1) ENDING(2),
       STARTING(3) ENDING(4),
       STARTING(5) ENDING(6),
       STARTING(7) ENDING(8),
       STARTING(9) ENDING(10))

日付およびタイム・スタンプの場合、EVERY 値をラベル付き期間にする必要があります。 例えば、次のようになります。

  CREATE TABLE FOO
    (A  DATE)
    PARTITION BY RANGE(A)
      (STARTING('2001-01-01') ENDING('2010-01-01') EVERY(3 MONTHS))
PARTITION BY HASH
表に行を挿入する場合、ターゲット・データのパーティションの判別にハッシュ関数を使用することを指定します。
(column-name,…)
パーティション・キーを指定します。 パーティション・キーは、表内のどのパーティションに行を置くかを判別するために使用します。 それぞれの column-name は、該当の表の列を識別する非修飾の名前でなければなりません。同じ列を複数回指定することはできません。

パーティション・キーでは、 浮動小数点、LOB、XML、日付、時刻、タイム・スタンプ、DataLink、ROWID、ID 列、および、フィールド・プロシージャー のある列を使用することはできません。

INTO 整数 PARTITIONS
パーティションの数を指定します。 パーティションの数は、256 以下でなければなりません。

materialized-query-definition

column-name
表の列の名前を指定します。列名のリストを指定する場合は、そのリストは、選択ステートメント の結果表にある列の数と同じ数の列名で構成されている必要があります。 各 column-name (列名) は、ユニークで、しかも非修飾でなければなりません。 列名のリストを指定しなかった場合、表の列は選択ステートメント の結果表の列の名前を継承します。

選択ステートメント の結果表に重複する列名または無名列がある場合は、列名のリストを指定する必要があります。 無名列は、定数、関数、式、またはセット演算 (UNION または INTERSECT) から生じる名前のない列で、この列には選択リストの AS 文節が使用されます。

FOR COLUMN システム列名
列の IBM i 名を指定します。表の複数の列やシステム列名に対して、同じ名前を使用してはなりません。

システム列名 が指定されず、また列名が有効なシステム列名 でない場合には、システム列名が生成されます。 システム列名の生成方法に関する詳細については、表名の生成の規則を参照してください。

選択ステートメント
表の列の名前および記述を、選択ステートメント を実行した場合 に選択ステートメント の派生結果表に現れる列と同じにすることを指定します。 AS (選択ステートメント) を使用すると、この表について n 個の列を暗黙的に定義したことになります。n は、選択ステートメント の結果として発生する列の数です。

この暗黙の定義には、n 列の以下の属性が含まれます (そのデータ・タイプに該当する場合):

  • 列名 (および、システム列名)
  • データ・タイプ、長さ、精度、および位取り
  • CCSID
  • NULL 可能性
  • FIELDPROC
  • 列の見出しとテキスト (LABELを参照)

以下の属性は組み込まれません。

  • デフォルト値
  • 非表示属性
  • 識別属性
  • 行変更タイム・スタンプ属性
  • 変更の始まり行開始、行終了、およびトランザクション開始 ID変更の終わり
  • 変更の始まり生成式変更の終わり

暗黙の定義には、識別された表またはビューのその他のオプション属性は含 まれません。例えば、新規の表には、表からの基本キーや外部キーは自動的には組み込 まれません。新規の表にこうしたオプション属性が組み込まれるのは、オプション文節を 明示的に指定した場合に限られます。

選択ステートメント は、変数、グローバル変数、または組み込みパラメーター・マーカーを参照するものであってはなりません。select-statement の SELECT 文節の式が列名でない場合は、フィールド・プロシージャーがある列をその式で参照することはできません。

選択ステートメント には、PREVIOUS VALUE 式または NEXT VALUE 式を含めてはなりません。UPDATE、SKIP LOCKED DATA、USE AND KEEP EXCLUSIVE LOCKS の各文節を指定することはできません。

refreshable-table-options
表がマテリアライズ照会表 であり、REFRESH TABLE ステートメントを使用して 選択ステートメント の結果を表に移植することを指定します。

選択ステートメント が GROUP BY 文節を含むマテリアライズ照会表は、 選択ステートメント で参照された表からのデータを要約します。 このようなマテリアライズ照会表は、サマリー表と呼ばれます。要約表は、特殊なタイプのマテリアライズ照会表です。

マテリアライズ照会表が定義されると、以下の選択ステートメント 制限が適用されます。

  • 選択ステートメント には、 別のマテリアライズ照会表の参照またはマテリアライズ照会表を参照するビューの参照を含めることはできません。
  • 選択ステートメント には、宣言済み一時表、QTEMP 内の表、プログラム記述ファイル、または FROM 文節の非 SQL 論理ファイルへの参照を含めることはできません。
  • 選択ステートメントには、データ変更ファイル参照 は含められません。
  • 選択ステートメント に、別のマテリアライズ照会表または宣言済み一時表を参照するビューの参照を含めることはできません。ENABLE QUERY OPTIMIZATION を指定してマテリアライズ照会表が定義されると、選択ステートメント には、次の段落で示す制約事項のうちのいずれかを含むビューの参照を含めることはできません。
  • 選択ステートメント には、 DataLink または DataLink が FILE LINK CONTROL である DataLink に基づく特殊タイプがある式を含めることはできません。
  • 選択ステートメント には、精度、DBCS-ONLY、 または DBCS-EITHER を持つバイナリーといった、 SQL データ・タイプではない結果列を含めることはできません。

ENABLE QUERY OPTIMIZATION でマテリアライズ照会表が定義されると、 以下の付加的な選択ステートメント 制限が適用されます。

  • 特殊レジスターを含めてはなりません。
  • 他の非 deterministic 関数を含めてはなりません。
  • ORDER BY 文節を使用できますが、REFRESH によってのみ使用されます。 これによって、マテリアライズ照会表のデータの参照の局所性が改善される場合があります。
  • 副選択がビューを参照する場合、ビュー定義内の選択ステートメント は、これらの制約事項を満たさなければなりません。
DATA INITIALLY DEFERRED
データの作成時に、そのデータをマテリアライズ照会表に挿入しないことを指定します。 REFRESH TABLE ステートメントを使用してマテリアライズ照会表を移植するか、 INSERT ステートメントを使用してデータをマテリアライズ照会表に挿入します。
DATA INITIALLY IMMEDIATE
データの作成時に、そのデータをマテリアライズ照会表に挿入することを指定します。
REFRESH DEFERRED
表内のデータを REFRESH TABLE ステートメントを使用していつでもリフレッシュできるように指定します。 表内のデータは、REFRESH TABLE ステートメントの処理時または最後に更新された時のスナップショットとしての照会の結果のみを反映します。
MAINTAINED BY USER
マテリアライズ照会表がユーザーによって保守されるように指定します。 ユーザーは表に対して INSERT、DELETE、UPDATE、または REFRESH TABLE ステートメントを使用できます。
ENABLE QUERY OPTIMIZATION または DISABLE QUERY OPTIMIZATION
このマテリアライズ照会表を最適化に使用できるかどうかを指定します。 デフォルトは ENABLE QUERY OPTIMIZATION です。
ENABLE QUERY OPTIMIZATION
マテリアライズ照会表を照会の最適化に使用できるように指定します。 指定した選択ステートメント が照会の最適化のための制約事項を満たしていない場合は、エラーが戻されます。
DISABLE QUERY OPTIMIZATION
マテリアライズ照会表を照会の最適化に使用できないように指定します。 それでもその表を直接照会することはできます。

select-statement 内で直接または間接に参照されている いずれかの表で行レベルまたは列レベルのアクセス制御がアクティブになっている 場合、作成される表に対して行アクセス制御が暗黙的にアクティブ化 されます。これにより、マテリアライズ照会表の内容への直接アクセスが制限されます。 表を明示的に参照する照会では、表内にデータがないことを示す警告が 戻されます。マテリアライズ照会表にアクセスするには、適切な行権限を作成します。またはふさわしいようであれば、マテリアライズ照会表に対する ALTER TABLE DEACTIVATE ROW ACCESS CONTROL を発行して、行レベルの保護を除去します。

表の属性 : 表は物理ファイルとして作成されます。 表が作成される場合、ファイル待ち時間とレコード待ち時間の属性は、物理ファイル作成 (CRTPF) コマンドの WAITFILE キーワードと WAITRCD キーワード上に指定されたデフォルト値に設定されます。

SQL 表は、削除済みの行で使用していたスペースが その後の挿入要求で再利用されるように作成されます。この属性は、コマンドの CHGPF、および REUSEDLT(*NO) パラメーターの指定によって変更することができます。 CHGPF コマンドについて詳しくは、「CL 解説書」を参照してください。

分散表は、その表が配布されるすべてのサーバーで作成されます。 分散表についての詳細は、DB2 マルチシステム (Multisystem) を参照してください。

表のジャーナリング: 表の作成時に、ジャーナリングを自動的に開始することができます。

  • QDFTJRN と呼ばれるデータ域が表が作成されたのと同じスキーマに存在し、 ユーザーがそのデータ域に対する権限を持っていると、以下のいずれかが当てはまる場合、 ジャーナリングがデータ域で指定されたジャーナルに対して開始されます。
    • 表の識別されたスキーマは、QSYS、QSYS2、QRECOVERY、QSPL、 QRCL、QRPLOBJ、QGPL、QTEMP、SYSIBM、またはこれらのライブラリーと同等の iASP であってはなりません。
    • データ域で指定されたジャーナルが存在していなければならず、 ユーザーはジャーナルに対してジャーナリングを開始する権限を持っていなければなりません。
    • データ域の最初の 10 バイトには、 ジャーナルを検索するスキーマの名前が含まれている必要があります。
    • 次の 10 バイトにはジャーナルの名前が含まれている必要があります。
    • 残りのバイトには、暗黙的にジャーナルに記録されるオブジェクト・タイプと、いつ暗黙的ジャーナリングを行うかに関係のあるオプションが含まれます。 オブジェクト・タイプには値 *FILE または *ALL を含める必要があります。値 *NONE を使用して、ジャーナリングが開始しないようにすることができます。
    詳しくは、ジャーナル管理を参照してください。
  • 指定した (STRJRNLIB コマンドを使用して) スキーマ内に表を作成すると、ジャーナリングが暗黙的に開始されます。
  • QDFTJRN と呼ばれるデータ域が表の作成時と同一のスキーマに存在しないか、またはユーザーがそのデータ域に対する権限を持っておらず、ジャーナリングを開始することがスキーマに指定されていない場合、表の作成時と同一のスキーマに QSQJRN というジャーナルが存在していると、そのジャーナルに対してジャーナリングが開始されます。

表の所有権: SQL 名が指定されている場合、

  • 作成した表が入れられるスキーマと同じ名前のユーザー・プロファイルが存在する場合、表の所有者 はそのユーザー・プロファイルです。
  • その他の場合は、表の所有者 は、このステートメントを実行しているスレッドのユーザー・プロファイルまたは グループ・ユーザー・プロファイルです。

システム名を指定した場合は、表の所有者 は、この ステートメントを実行しているスレッドのユーザー・プロファイルまたはグループ・ユーザー・プロファイルです。

表の権限 : SQL 名を使用する場合 は、表は、*PUBLIC に対するシステム権限 *EXCLUDE を使用して作成されます。 システム名を使用する場合、表は、スキーマの作成権限 (CRTAUT) パラメ ーターによって決められる *PUBLIC に対する権限を使用して作成されます。

表の所有者がグループ・プロファイルのメンバー (GRPPRF キーワード) であり、グループ権限が指定されている (GRPAUT キーワード) 場合は、そのグループ・プロファイルにも、その表に対する権限が与えられます。

変更の始まり

REPLACE の規則: 表が REPLACE によって PRESERVE ROWS を使用して再作成される際には、 表の新しい定義が古い定義と比較され、論理的に、二者間の各相違点について、対応する ALTER 操作が実行されます。 DELETE ROWS オプションを使用すると、表は論理的に除去され、再作成されます。 表に従属するオブジェクトが有効である限り、変更は可能です。 詳しくは、ALTER TABLE の 表 1 を参照してください。 列、制約、およびパーティションについては、それらの名前と属性に基づいて比較が実行されます。

列名またはシステム列名のいずれかを修正し、もう一方の名前は変えないままにして、列名とシステム列名を変更することができます。 どちらの名前も既存の列に一致しない場合、新しい列が作成されます。 列名に依存する別のオブジェクトが存在すると、名前変更をできない可能性があります。

新規の定義と既存の定義 同等の ALTER TABLE アクション
列が両方に存在し、属性は同じである 変更なし
列が両方に存在し、属性は異なる ALTER COLUMN
列が新規の表定義にのみ存在する ADD COLUMN
列が既存の表定義にのみ存在する DROP COLUMN RESTRICT
制約
制約が両方に存在し、同じである 変更なし
制約が両方に存在し、異なる DROP constraint RESTRICT および ADD constraint
制約が新規の表定義にのみ存在する ADD constraint
制約が既存の表定義にのみ存在する DROP constraint RESTRICT
materialized-query-definition
materialized-query-definition が両方に存在し、同じである 変更なし
materialized-query-definition が両方に存在し、異なる ALTER MATERIALIZED QUERY
materialized-query-definition が新規の表定義にのみ存在する ADD MATERIALIZED QUERY
materialized-query-definition が既存の表定義にのみ存在する DROP MATERIALIZED QUERY
partitioning-clause
partitioning-clause が両方に存在し、同じである 変更なし
partitioning-clause が両方に存在し、異なる ADD PARTITION、DROP PARTITION、および ALTER PARTITION
partitioning-clause が新規の表定義にのみ存在する ADD partitioning-clause
partitioning-clause が既存の表定義にのみ存在する DROP PARTITIONING
PERIOD
PERIOD が両方に存在し、同じである 変更なし
PERIOD が新規の表定義にのみ存在する ALTER ADD PERIOD
PERIOD が既存の表定義にのみ存在する

ALTER DROP PERIOD
表がシステム期間テンポラル表である場合、
期間は除去できません

NOT LOGGED INITIALLY
NOT LOGGED INITIALLY が両方に存在する 変更なし
NOT LOGGED INITIALLY が新規の表定義にのみ存在する NOT LOGGED INITIALLY
NOT LOGGED INITIALLY が既存の表定義にのみ存在する 最初にログに記録
VOLATILE
VOLATILE 属性が両方に存在し、同じである 変更なし
VOLATILE 属性が新規の表定義にのみ存在する VOLATILE
VOLATILE 属性が既存の表定義にのみ存在する NOT VOLATILE
media-preference
media-preference が両方に存在し、同じである 変更なし
media-preference が新規の表定義にのみ存在する ALTER media-preference
media-preference が既存の表定義にのみ存在する UNIT ANY
memory-preference
memory-preference が両方に存在し、同じである 変更なし
memory-preference が新規の表定義にのみ存在する ALTER memory-preference
memory-preference が既存の表定義にのみ存在する KEEP IN MEMORY NO
CREATE TABLE ステートメントで指定できない属性はすべて保持されます。
  • 権限を持つユーザーは維持されます。オブジェクト所有者は変更される可能性があります。
  • Current®ジャーナル監査は保持されます。ただし、他のオブジェクトと異なり、表の REPLACE では、ZC (オブジェクト変更) ジャーナル監査項目が生成されます。
  • 現行のデータ・ジャーナル処理は保持されます。
  • コメントとラベルは保持されます。
  • トリガーは、可能であれば保持されます。 トリガーを保持できない場合は、エラーが戻されます。
  • マスクと許可は、可能であれば保持されます。 マスクや許可を保持できない場合は、エラーが戻されます。
  • テンポラル表 VERSIONING と履歴表は保持されます。
  • 表に従属するビュー、マテリアライズ照会表、および索引は、可能であれば保持されるか、再作成されます。 従属するビュー、マテリアライズ照会表、または索引を保持できない場合は、エラーが戻されます。
変更の終わり

ID 列の使用: 表に ID 列がある場合は、データベース・マネージャーは、表に行が挿入されたときに、その列の順次数値を自動的に生成することができます。 したがって、ID 列は基本キーとして最適です。

ID 列と ROWID 列は、どちらにもデータベース・マネージャーが生成する値が含まれるという点で同じです。 ROWID 列は、直接行アクセスに使用すると便利です。 ROWID 列には、ROWID データ・タイプの値が入ります。これは、規則的 に昇順または降順にはならない 40 バイトの VARCHAR 値を戻します。 したがって、ROWID データ値は、社員番号や製品番号の生成など、多く のアプリケーション用途にはあまり適していません。 直接行アクセスを必要としないデータの場合は、一般に ID 列を使用す る方が効果的です。なぜなら、ID 列には既存の数値データ・タイプが含ま れており、ROWID 値には不向きなさまざまな用途に利用できるからです。

表が特定時点の状態に回復されたときに (RMVJRNCHG を使用)、ID 列に ついて生成される値のシーケンスに大きなギャップが生じることがあります。 例えば、増分値が 1 で、時刻 T1 に最後に生成された値が 100 で 、データベース・マネージャーがその後 1000 まで順次、値を 生成する ID 列がある表を想定します。さらに、この表が時点 T1 にさかのぼって回復されたとします。 この場合、リカバリーの完了後最初に挿入される行の ID 列の値は 1001 に なり、ID 列の値に 100 から 1001 というギャップが生じます。

CYCLE を指定した場合は、列に対して固有制約または固有索引が定義されて いない限り、その列が GENERATED ALWAYS であっても、その列について重複値 が生成されることがあります。

マテリアライズ照会表の作成: マテリアライズ照会表が照会に使用される前にデータを持つようにするには、以下のようにします。

  • DATA INITIALLY IMMEDIATE を使用してマテリアライズ照会表を作成する必要があります。または、
  • 照会最適化を使用不可にした状態でマテリアライズ照会表を作成して、 表のリフレッシュ後に表の照会最適化を使用可能にする必要があります。

CREATE TABLE ステートメントが実行されたときの分離レベルが、マテリアライズ照会表の分離レベルになります。 ISOLATION 文節 を使用して、分離レベルを明示的に指定できます。

暗黙的な非表示列に関する考慮事項: 暗黙的に非表示と定義されている列は、SELECT リスト内で * を指定する照会の結果表の一部にはなりません。ただし、暗黙的な非表示列を 照会で明示的に参照することはできます。例えば、暗黙的な非表示列を照会の SELECT リストや述部で参照できます。さらに、暗黙的な非表示列は、COMMENT ステートメント、CREATE INDEX ステートメント、ALTER TABLE ステートメント、INSERT ステートメント、MERGE ステートメント、または UPDATE ステートメントで明示的に参照できます。 暗黙的な非表示列は、参照制約で参照できます。列リストを含まない REFERENCES 文節は、親表の主キーを暗黙的に参照します。親表の主キーに、暗黙的に非表示と定義された列が組み込まれる場合があります。そのような参照制約を使用可能です。

マテリアライズ照会定義の全選択の SELECT リストで、暗黙的な非表示列を明示的に参照している場合、その列はマテリアライズ照会表の一部になります。

ビュー定義 (CREATE VIEW ステートメント) の全選択の SELECT リストで、暗黙的な非表示列を明示的に参照している場合、その列は当該ビューの一部となりますが、そのビューの列は「非表示」とは見なされません。

変更の始まり
トランザクション開始 ID 列に関する考慮事項: トランザクション開始 ID 列で NULL 値が許可され、行開始列が存在し、その行開始列の値が他のトランザクションで生成された行開始列の値とは異なる固有の値になっている場合、トランザクション開始 ID 列には NULL 値が含まれます。列に NULL 値が含まれる可能性があるため、その列から値を取り出すときには、以下のいずれかの方式を使用することをお勧めします。
COALESCE (transaction_start_id_col, row_begin_col)
 
CASE WHEN transaction_start_id_col IS NOT NULL
          THEN transaction_start_id_col 
     ELSE row_begin_col END
変更の終わり
変更の始まり
システム期間テンポラル表の定義: システム期間テンポラル表の定義には、以下が含まれます。
  • SYSTEM_TIME という名前のシステム期間。これは、行開始列と行終了列を使用して定義されます。 AS ROW BEGIN、AS ROW END、および period-definition の説明を参照してください。
  • トランザクション開始 ID 列。AS TRANSACTION START ID の説明を参照してください。
  • 後続の ALTER TABLE ステートメントで指定される、ADD VERSIONING アクションを指定するシステム期間データ・バージョン管理定義。これには関連履歴表の名前が含まれます。 ADD VERSIONING USE HISTORY TABLE history-table-nameを参照してください。
変更の終わり

パーティション化された表のパフォーマンス: パーティション化された表のパーティション数が大きくなると、 SQL データ変更および SQL データ・ステートメントのオーバーヘッドも大きくなります。 このオーバーヘッドを最小化するのに必要な最小数のパーティションを持つパーティション化された表を作成する必要があります。 パーティション化された表にアクセスする場合、 並列処理の度合いを 1 より大きくすることを考慮するようお勧めします。

リモート選択ステートメントを使用した表作成: as-result-tableselect-statement は、表を作成するサーバーとは別のサーバー上の 表を参照できます。これを行うには、3 部構成のオブジェクト名を使用するか、または、表またはビューの 3 部構成の名前を参照するよう定義された別名を 使用します。select-statement は マテリアライズ照会表に対するものにはできず、その結果は フィールド・プロシージャーが定義された列を含むことはできません。リモート・サーバー が DB2 for LUW または DB2 for z/OS® である場合、copy-options は許可されません。リモート・サーバー が DB2 for LUW の場合、AS キーワードの前に列リストを明示的に指定する必要があります。

代替構文: 以下のキーワードは、旧リリースとの互換性を維持するためにサポートされている同義語です。 これらのキーワードは標準キーワードではないので、原則として使用しないようにしてください。

  • 変更の始まりINLINE LENGTH は ALLOCATE の同義語です。変更の終わり
  • 参照制約 内の FOREIGN KEY キーワードの後に 制約名 (CONSTRAINT キーワードなし) を指定することもできます。
  • DEFINITION ONLY は WITH NO DATA の同義語です。
  • PARTITIONING KEY は DISTRIBUTE BY HASH の同義語です。
  • PART は PARTITION の同義語です。
  • PARTITION パーティション名 の代わりに、 PARTITION パーティション番号 を指定できます。 partition-number では、CREATE TABLE ステートメントで既に指定されているパーティションを指定することはできません。

    partition-number を指定しない場合は、データベース・マネージャーによって固有のパーティション番号が生成されます。

  • VALUES は ENDING AT の同義語です。
  • マテリアライズ照会表の作成時の CREATE と TABLE の間の SUMMARY です。

最大行サイズ

最大行サイズについては、列定義 の記述で参照される制約 事項が 2 つあります。

  • 最大行バッファー・サイズは 32766、あるいは VARCHAR、VARGRAPHIC、VARBINARY、LOB、または XML 列が指定されている場合は 32740 です。
  • LOB または XML 列が指定されている場合の最大行データ・サイズは、3 758 096 383 です。このサイズは、行が挿入または更新されるときに決定されます。 LOB または XML 列が指定されていない場合の最大行データ・サイズは 32766 で、VARCHAR 列、VARGRAPHIC 列、または VARBINARY 列が指定されている場合の最大行データ・サイズは 32740 です。

行バッファーおよび行データ、またはその両方の長さを決定するには、そのデータ・タイプのバイト数に基づいて、その行のそれぞれの列に対応する長さを加算します。

次の表は、NULL 値が使用できない列に関して、データ・タイプごとの列のバイト・カウントを示します。 NULL 値が許される列であればどのような列であっても、8 つの列ごとに 1 バイトが必要になります。フィールド・プロシージャーがある列の場合は、そのフィールド・プロシージャーの結果に基づいてカウントが変わる可能性もあります。

表 1. データ・タイプ別の列のバイト・カウント
データ・タイプ 行バッファー・バイト・カウント 行データ・バイト・カウント
SMALLINT 2 2
INTEGER 4 4
BIGINT 8 8
DECIMAL( p, s) (p/2) + 1 の整数部分 (p/2) + 1 の整数部分
NUMERIC(p, s) p p
FLOAT (単精度) 4 4
FLOAT (倍精度) 8 8
DECFLOAT(16) 8 8
DECFLOAT(34) 16 16
CHAR(n) n n
VARCHAR( n) n+2 n+2
CLOB (n) 29+ 埋め込み n+29
GRAPHIC(n) n*2 n*2
VARGRAPHIC (n) n*2+2 n*2+2
DBCLOB( n) 29+ 埋め込み n*2+29
BINARY( n) n n
VARBINARY( n) n+2 n+2
BLOB( n) 29+ 埋め込み n+29
DATE 10 4
TIME 8 3
TIMESTAMP(p) p が 0 の場合は 19、 それ以外の場合は 20+p ((p+1)/2) の整数部分 + 7
DATALINK( n) n+24 n+24
ROWID 42 28
XML 29+ 埋め込み 2 147 483 647
特殊タイプ ソース・タイプのバイト・カウント ソース・タイプのバイト・カウント
注 :

埋め込み は、境界合わせに必要な 1 から 15 の値です。

データベースに記述される精度

  • 浮動小数点フィールドは、ビット精度ではなく、10 進精度で DB2 for iデーターベース内に定義されます。 ビット数による精度を 10 進精度に変換するには、10 進精度 = CEILING(n/3.31) (n は、変換するビット数) という算式を使用します。 10 進精度は、対話式 SQL を使用した場合に、表示される数値の桁数を決めるのに使用されます。
  • SMALLINT (短整数) フィールドは、10 進精度 (4,0) で保管されます。
  • INTEGER (整数) フィールドは、10 進精度 (9,0) で保管されます。
  • BIGINT フィールドは、10 進精度 (19,0) で保管されます。

LONG VARCHAR、LONG VARGRAPHIC、および LONG VARBINARY

非標準構文である LONG VARCHAR、LONG VARGRAPHIC、および LONG VARBINARY がサポートされていますが、これは使用しないようにしてください。標準構文である VARCHAR(整数)、VARGRAPHIC(整数)、および VARBINARY(整数) の方が優先されます。したがって、VARCHAR(整数)、VARGRAPHIC(整数)、および VARBINARY(整数) を使用することをお勧めします。CREATE TABLE ステートメントの処理後、データベース・マネージャーは、LONG VARCHAR 列を VARCHAR、LONG VARGRAPHIC 列を VARGRAPHIC、そして LONG VARBINARY 列を VARBINARY と見なして処理を進めます。最大長は、移植不能な製品固有の方式で計算されます。

LONG VARCHAR 1
行内で使用可能なスペースの量によって最大長が決まる可変長文字ストリングを示します。
LONG VARGRAPHIC 1
行内で使用可能なスペースの量によって最大長が決まる可変長グラフィック・ストリングを示します。
LONG VARBINARY 1
行内で使用可能なスペースの量によって最大長が決まる可変長バイナリー・ストリングを示します。

LONG 列の最大長は、次のようにして決まります。 ただし、

  • i は、表のすべての列 (ただし、LONG VARCHAR、LONG VARGRAPHIC、または LONG VARBINARY でもない) の行バッファー・バイト数の合計とする。
  • j は、表の LONG VARCHAR、LONG VARGRAPHIC、および LONG VARBINARY の列の数とする。
  • k は、該当の行で NULL が使用可能な列の数とする。

LONG VARCHAR および LONG VARBINARY 列それぞれの長さは、INTEGER((32716 - i-((k+7)/8))/j) になります。

それぞれの LONG VARGRAPHIC 列の長さは、LONG VARCHAR 列に関して計算した長さを 2 で割って決定します。この結果の整数部が長さになります。

システム名の生成規則

システムがシステム表、ビュー、索引、または列名を生成する場合は、特定の方法があります。 以下の各項では、これらの方法およびシステム名生成規則について説明します。

列名の生成の規則

システム列名は、表またはビューの作成時点でそのシステム列名の指定がなく、しかも、列名が有効なシステム列名でない場合に生成されます。

列名に特殊文字が入っておらず、しかもその長さが 10 桁を超える場合には、10 桁のシステム列名が次のように生成されます。

  • その名前の最初の 5 文字
  • 5 桁の固有の番号

例えば、次のようになります。

LONGCOLUMNNAME のシステム列名は LONGC00001

列名が区切られている場合には、

  • 区切り文字と区切り文字の範囲内にある文字から、最初の 5 文字がシステム列名の最初の 5 文字として使用されます。 その範囲内の文字の数が、5 文字以下の場合には、その名前の右側は、下線 (_) で埋められます。 小文字は、大文字に変換されます。システム列名に使用できる有効な文字は、A から Z、0 から 9、@、 #、¥、および _ だけです。 これら以外の文字は、いずれも下線 (_) 文字に変えられます。この結果、最初の文字が下線になる場合、最初の文字は文字 Q に変えられます。
  • 上記の 5 桁の文字に 5 桁の固有の番号が付加されます。

例えば、次のようになります。

   "abc" のシステム列名は ABC__00001
   "COL2.NAME" のシステム列名は COL2_00001
   "C 3" のシステム列名は C_3__00001
   "??" のシステム列名は Q____00001
   
   "*column1" のシステム列名は QCOLU00001

表名の生成の規則

表、ビュー、別名、 または索引が FOR SYSTEM NAME 節を使用せずに作成され、以下のいずれかの名前 である場合、システム名が作成されます。

  • 長さが 10 桁を超える名前
  • システム名での使用が有効でない文字を含む名前

SQL 名、または対応するシステム名はいずれも、SQL ステートメントで使用して、作成済みの該当ファイルのアクセスに用いることができます。ただし、SQL 名を識別するのは、DB2 for i だけであり、他の環境では、システム名を使用する必要があります。

システム名を生成するには 2 つの方法があります。

  • QGENOBJNAM と呼ばれるデータ域が表が作成されたのと同一のスキーマに存在する場合、ユーザーは生成される名前を変更することができます。

    データ域には、次のような制限があります。

    • ユーザーには、データ域を読み取る権限がなければならない。
    • データ域は、CHAR(10) の属性を持っていなければならない。
    • データ域値の先頭の 5 文字は、「?????」でなければならない。.
    • データ域値の次の 5 文字は、5 桁の数値でなければならない。

    上記の条件のいずれかが満たされない場合、またはデータ域の開始値にアクセスしている最中に何らかのエラーが発生した場合は、データ域が存在しなかった場合と同様に、デフォルト名生成規則が使用されます。

    データ域が上記のすべての制約事項を満たした場合、生成される名前は、下記のデフォルト名生成規則と同様になります。ただし、名前の先頭の 5 (または 4) 文字の後の固有番号には、(「00001」または「0001」の代わりに) 最初にデータ域で指定された 5 桁が入ります。

    例えば、データ域の値が「?????00999」だった場合。

       「??」のシステム名は「__00999」
       "longtablename" のシステム名は "lon00999"
       "LONGTableName" のシステム名は LONG00999
       "A b   " のシステム名は "A_b00999"
  • それ以外の場合は、デフォルト名生成規則が使用されます。

    名前に特殊文字が含まれておらず、その長さが 10 桁を超えている場合には、次のように 10 桁のシステム名が生成されます。

    • その名前の最初の 5 文字
    • 5 桁の固有の番号

    例えば、次のようになります。

       LONGTABLENAME のシステム名は LONGT00001

    その SQL 名に特殊文字が入っている場合、システム名の生成は次のようになります。

    • その名前の最初の 4 文字
    • 4 桁の固有の番号

    さらに、

    • 特殊文字は、すべて下線 (_) に置き換えられます。
    • 末尾ブランクは、すべてその名前から除去されます。
    • その名前を有効なシステム名にする上で区切り文字が必要になる場合には、その名前は二重の引用符 (") によって区切られます。

    例えば、次のようになります。

       "??" のシステム名は "__0001"
       "longtablename" のシステム名は "long0001"
       "LONGTableName" のシステム名は LONG0001
       "A b   " のシステム名は "A_b0001"

    SQL は相互参照ファイルを検索して、システム名が固有であることを保証します。 ある名前が既に相互参照ファイルに存在している場合、その名前が固有の 名前になるまで、その番号を増やします。

    上記の規則を使用しても固有名を決められない場合は、名前の番号の桁数を 1 桁追加して、固有名になるまで、または範囲の限界に達するまで、番号を増分します。 例えば、"longtablename" を作成しているときに、"long0001" から "long9999" が既に存在する場合、名前は "lon00001" になります。

例 1: データベース管理者権限を持っているものとして、‘ROSSITER.INVENTORY’ という名前の表を作成します。この表は、次のような列から構成されます。

部品番号
短整数、NULL 不可
説明
0 から 24 の文字、NULL 可
在庫数量、
整数、NULL 可
  CREATE TABLE ROSSITER.INVENTORY
    (PARTNO         SMALLINT     NOT NULL,
     DESCR          VARCHAR(24),
     QONHAND        INT)

例 2: DEPARTMENT という名前の表を作成します。この表は、次のような列から構成されます。

部門番号
3 文字長で、NULL は使用できない。
部門名
0 から 36 文字長で、NULL は使用できない。
管理者番号
6 文字長
管理部門
3 文字長で、NULL は使用できない。
ロケーション名
16 文字長で NULL を使用できる。

基本キーは、列 DEPTNO です。

  CREATE TABLE DEPARTMENT
    (DEPTNO    CHAR(3)     NOT NULL,
     DEPTNAME  VARCHAR(36) NOT NULL,
     MGRNO     CHAR(6),
     ADMRDEPT  CHAR(3)     NOT NULL,
     LOCATION  CHAR(16),
     PRIMARY KEY(DEPTNO))

例 3: ビュー PRJ_LEADER の列と同じ列定義に従って、REORG_PROJECTS という名前の表を作成します。

  CREATE TABLE REORG_PROJECTS
    LIKE PRJ_LEADER

例 4: EMP_NO という ID 列を指定する EMPLOYEE2 表を作成します。ID 列を定義して、DB2 for i が常に列の値を生成するようにします。割り当てる最初の値および後に生成される連続番号の間の増分差に対して、 デフォルト値である 1 を使用します。

  CREATE TABLE EMPLOYEE2
    ( EMPNO INTEGER GENERATED ALWAYS AS IDENTITY,
      ID SMALLINT,
      NAME CHAR(30),
      SALARY DECIMAL(5,2),
      DEPTNO SMALLINT)

例 5: TRANS という名前の非常に大きいトランザクション表に、 会社に処理されるトランザクション処理ごとに 1 つの行が含まれると想定します。 表は、多くの列で定義されます。 日付およびトランザクションの量に関する毎日のサマリー・データが含まれる、 マテリアライズ照会表を作成します。

  CREATE TABLE STRANS
    AS (SELECT  YEAR AS SYEAR, MONTH AS SMONTH, DAY AS SDAY, SUM(AMOUNT) AS SSUM
        FROM TRANS
        GROUP BY YEAR, MONTH, DAY )
    DATA INITIALLY DEFERRED
    REFRESH DEFERRED
    MAINTAINED BY USER 
変更の始まり

例 6: SYSTEM_TIME 期間を使用する表 policy_info を作成し、履歴表 hist_policy_info を作成します。次に、policy_info 表を hist_policy_info table 表に関連付ける ALTER TABLE ステートメントを発行します。

変更の終わり
変更の始まり
CREATE TABLE policy_info
    (policy_id CHAR(10) NOT NULL,
     coverage INT NOT NULL,
     sys_start TIMESTAMP(12) NOT NULL GENERATED ALWAYS AS ROW BEGIN,
     sys_end TIMESTAMP(12) NOT NULL GENERATED ALWAYS AS ROW END,
     create_id TIMESTAMP(12) GENERATED ALWAYS AS TRANSACTION START ID,
     PERIOD SYSTEM_TIME(sys_start,sys_end));

CREATE TABLE hist_policy_info
    (policy_id CHAR(10) NOT NULL,
     coverage INT NOT NULL,
     sys_start TIMESTAMP(12) NOT NULL,
     sys_end TIMESTAMP(12) NOT NULL,
     create_id TIMESTAMP(12));

ALTER TABLE policy_info
	ADD VERSIONING USE HISTORY TABLE hist_policy_info;  
LIKE について生成属性はコピーされないため、履歴表は以下の方法でも作成できます。
CREATE TABLE hist_policy_info
      LIKE policy_info; 
変更の終わり
1 他のプロダクトとの互換性を備えるために、このオプションが用意されています。ただし、代わりに VARCHAR(整数)、VARGRAPHIC(整数)、または VARBINARY(整数) の指定をお勧めします。