CREATE TABLE

CREATE TABLE ステートメントは表を定義します。定義には、表の名前およびその列の名前と属性を含めなければなりません。定義には、表の主キーや表スペースなど、表のその他の属性も含めることができます。

呼び出し

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

許可

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

  • IN 文節により明示的に指定されたデータベースに対する CREATETAB 特権。

    IN 文節が指定されていない場合、データベース DSNDB04 に対する CREATETAB 特権が必要です。

  • IN 文節により明示的に指定されたデータベースに対する DBADM、DBCTRL、または DBMAINT 権限。 IN 文節が指定されていない場合、データベース DSNDB04 に対する DBADM、DBCTRL、または DBMAINT 権限が必要です。
  • SYSADM または SYSCTRL 権限
  • 変更の始まりシステム DBADM変更の終わり

表スペースが暗黙的に作成された場合、以下で定義する特権セットに 少なくとも次のいずれかが含まれている必要があります。

  • IN 文節により明示的に指定されたデータベースに対する CREATETS 特権。

    IN 文節が指定されていない場合、データベース DSNDB04 に対する CREATETS 特権が必要です。

  • IN 文節により明示的に指定されたデータベースに対する DBADM、DBCTRL、または DBMAINT 権限。 IN 文節が指定されていない場合、データベース DSNDB04 に対する DBADM、DBCTRL、または DBMAINT 権限が必要です。
  • SYSADM または SYSCTRL 権限
変更の始まり特権セットには、以下のオブジェクトに対する USE 特権も持っていなければなりません。
  • IN 文節で指定されている場合は表スペース
  • データベースが IN 文節で指定されている場合はデータベースのデフォルトのバッファー・プールとデフォルトのストレージ・グループ
変更の終わり

変更の始まり表スペース名を指定する場合には、SYSADM 権限、SYSCTRL 権限、またはデータベースに対する DBADM 権限も持っていなければなりません。変更の終わり

暗黙的データベース内に作成される表の場合、データベース権限が DSNDB04 で保持される必要があります。

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

  • 文節 IN、LIKE または FOREIGN KEY が指定されている。
  • 列のデータ・タイプが特殊タイプ。
  • 表スペースが暗黙的に作成された。
  • 全選択 を指定している。
  • 列がセキュリティー・ラベル列として定義されている。

これらの特権の詳細については、該当する文節の説明を参照してください。

特権セット : 変更の始まりアプリケーション・プログラムにこの ステートメントを組み込む場合、特権セットは、パッケージの所有者が持つ特権となります。

アプリケーションが、ROLE AS OBJECT OWNER 文節が指定されたトラステッド・コンテキスト内にバインドされている場合:

  • ロールは作成されている表の所有者です。
  • 特権セットは当該ロールが保持する一連の特権です。
  • ロールがスキーマに対する CREATEIN 特権、SYSADM 権限、SYSCTRL 権限、またはシステム DBADM 権限を持っていない限り、スキーマ修飾子 (暗黙的または明示的) はロールと同じである必要があります。

それ以外の場合は、許可 ID がパッケージの所有者となり、以下の規則が適用されます。

  • スキーマに対する CREATEIN 特権、SYSADM 権限、SYSCTRL 権限、およびシステム DBADM 権限が特権セットにない場合、スキーマ修飾子 (暗黙的または明示的) は、パッケージの所有者の許可 ID と同じでなければなりません。
  • SYSADM 権限、SYSCTRL 権限、およびシステム DBADM 権限が特権セットになく、表が明示的に修飾されている場合、スキーマ名と同じ許可 ID が表を作成するために必要なすべての特権を持ち、その許可 ID が表の所有者でなければなりません。それ以外の場合は、パッケージの所有者の許可 ID が表を作成するために必要なすべての特権を持ち、その許可 ID が表の所有者になります。
  • SYSADM 権限、SYSCTRL 権限、またはシステム DBADM 権限が特権セットに含まれている場合、スキーマ修飾子 (暗黙的または明示的) はどのスキーマ名でも構いません。ただし、表が明示的に修飾されている場合は、スキーマ名と同じ許可 ID が表の所有者になります。それ以外の場合は、パッケージの所有者の許可 ID が表の所有者です。
  • データベースの DBADM 権限および DBCTRL 権限が特権セットに含まれている場合、スキーマ修飾子 (暗黙的または明示的) はどのスキーマ名でも構いません。 ただし、表が明示的に修飾されている場合は、スキーマ名と同じ許可 ID が表の所有者になります。それ以外の場合は、パッケージの所有者の許可 ID が表の所有者です。

このステートメントが動的に準備される場合、特権セットは、プロセスの SQL 許可 ID が持つ特権となります。ただし、プロセスがトラステッド・コンテキスト内にあり、ROLE AS OBJECT OWNER 文節が有効である場合を除きます。ROLE AS OBJECT OWNER が有効である場合、特権セットは、プロセスの 1 次許可 ID と関連するロールが持つ特権となり、表の所有者はそのロールになります。ロールがスキーマに対する CREATEIN 特権、SYSADM 権限、SYSCTRL 権限、またはシステム DBADM 権限を持っていない限り、スキーマ修飾子 (暗黙的または明示的) はロールと同じである必要があります。

プロセスの SQL 許可 ID が特権を持っている場合、次の規則が適用されます。

  • スキーマに対する CREATEIN 特権、SYSADM 権限、SYSCTRL 権限、およびシステム DBADM 権限が特権セットにない場合、スキーマ修飾子は、プロセスの許可 ID と同じでなければなりません。
  • SYSADM 権限、SYSCTRL 権限、およびシステム DBADM 権限が特権セットになく、表が明示的に修飾されている場合、スキーマ名と同じ許可 ID が表を作成するために必要なすべての特権を持ち、その許可 ID が表の所有者でなければなりません。それ以外の場合は、プロセスの SQL 許可 ID には表を作成するために必要なすべての特権が必要であり、その許可 ID が表の所有者になります。
  • SYSADM 権限、SYSCTRL 権限、またはシステム DBADM 権限が特権セットに含まれている場合、スキーマ修飾子はどのスキーマ名でも構いません。ただし、表が明示的に修飾されている場合は、スキーマ名と同じ許可 ID が表の所有者になります。それ以外の場合は、プロセスの SQL 許可 ID が表の所有者になります。
変更の終わり

構文

>>-CREATE TABLE--table-name------------------------------------->

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

   .-------------------------------------------------------------.   
   V  (1)                                                        |   
>---------+----------------------------------------------------+-+-><
          +-+-IN--+----------------+-table-space-name-+--------+     
          | |     '-database-name.-'                  |        |     
          | +-IN DATABASE--database-name--------------+        |     
          | '-IN ACCELERATOR--accelerator-name--------'        |     
          +-| partitioning-clause |----------------------------+     
          +-| organization-clause |----------------------------+     
          |                         .-WITH ROW ATTRIBUTES----. |     
          +-EDITPROC -program-name--+------------------------+-+     
          |                         '-WITHOUT ROW ATTRIBUTES-' |     
          +-VALIDPROC -program-name----------------------------+     
          | .-AUDIT NONE----.                                  |     
          +-+---------------+----------------------------------+     
          | +-AUDIT CHANGES-+                                  |     
          | '-AUDIT ALL-----'                                  |     
          +-OBID -integer--------------------------------------+     
          | .-DATA CAPTURE NONE----.                           |     
          +-+----------------------+---------------------------+     
          | '-DATA CAPTURE CHANGES-'                           |     
          +-WITH RESTRICT ON DROP------------------------------+     
          +-CCSID--+-ASCII---+---------------------------------+     
          |        +-EBCDIC--+                                 |     
          |        '-UNICODE-'                                 |     
          |                 .-CARDINALITY-.                    |     
          | .-NOT VOLATILE--+-------------+-.                  |     
          +-+-------------------------------+------------------+     
          | |           .-CARDINALITY-.     |                  |     
          | '-VOLATILE--+-------------+-----'                  |     
          | .-LOGGED-----.                                     |     
          +-+------------+-------------------------------------+     
          | '-NOT LOGGED-'                                     |     
          | .-COMPRESS NO--.                                   |     
          +-+--------------+-----------------------------------+     
          | '-COMPRESS YES-'                                   |     
          |         .-NO--.                                    |     
          +-APPEND--+-YES-+------------------------------------+     
          +-DSSIZE -integer-- G--------------------------------+     
          +-BUFFERPOOL -bpname---------------------------------+     
          +-MEMBER CLUSTER-------------------------------------+     
          | .-TRACKMOD YES-.                                   |     
          '-+--------------+-----------------------------------'     
            '-TRACKMOD NO--'                                         

注:
  1. 同じ文節を複数回指定してはなりません。

column-definition:

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

   .--------------------------------------------------------------------------------------.   
   V  (2)                                                                                 |   
>---------+-----------------------------------------------------------------------------+-+-><
          +-NOT NULL--------------------------------------------------------------------+     
          +-| generated-column-definition |---------------------------------------------+     
          +-| column-constraint |-------------------------------------------------------+     
          | .-WITH-.                                                                    |     
          +-+------+--DEFAULT--+------------------------------------------------------+-+     
          |                    +-constant---------------------------------------------+ |     
          |                    +-+-SESSION_USER-+-------------------------------------+ |     
          |                    | '-USER---------'                                     | |     
          |                    +-CURRENT SQLID----------------------------------------+ |     
          |                    +-NULL-------------------------------------------------+ |     
          |                    |  (3)                                                 | |     
          |                    '-------cast-function-name--(--+-constant---------+--)-' |     
          |                                                   +-+-SESSION_USER-+-+      |     
          |                                                   | '-USER---------' |      |     
          |                                                   +-CURRENT SQLID----+      |     
          |                                                   '-NULL-------------'      |     
          +-FIELDPROC -program-name--+------------------+-------------------------------+     
          |                          |   .-,--------.   |                               |     
          |                          |   V          |   |                               |     
          |                          '-(---constant-+-)-'                               |     
          |                   (4)                                                       |     
          +-AS SECURITY LABEL-----------------------------------------------------------+     
          |                   (5)                                                       |     
          +-IMPLICITLY HIDDEN-----------------------------------------------------------+     
          |                        (6)                                                  |     
          '-INLINE LENGTH--integer------------------------------------------------------'     

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

data-type:

構文図を読む
>>-+-| built-in-type |--+--------------------------------------><
   '-distinct-type-name-'   

built-in-type:

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

XML-type-modifier:

              .-,-------------------------------------------------------.   
              V                                                         |   
>>-XMLSCHEMA----| XML-schema-specification |--+-----------------------+-+-><
                                              '-ELEMENT--element-name-'     

変更の始まり

XML-schema-specification:

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

変更の始まり

generated-column-definition:

変更の終わり
                .-ALWAYS-----.                                              
>>-+-GENERATED--+------------+--+------------------------------------+--+-><
   |            '-BY DEFAULT-'  +-| as-identity-clause |-------------+  |   
   |                            '-| as-row-change-timestamp-clause |-'  |   
   |            .-ALWAYS-.                                              |   
   '-GENERATED--+--------+--+-| as-row-transaction-timestamp-clause |-+-'   
                            '-| as-row-transaction-start-id-clause |--'     

as-identity-clause:

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

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

as-row-change-timestamp-clause:

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

変更の始まり

as-row-transaction-timestamp-clause:

変更の終わり
>>-AS ROW--+-BEGIN-+-------------------------------------------><
           '-END---'   

変更の始まり

as-row-transaction-start-id-clause:

変更の終わり
>>-AS TRANSACTION START ID-------------------------------------><

column-constraint:

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

>--+-+-PRIMARY KEY-+--------------+----------------------------><
   | '-UNIQUE------'              |   
   +-| references-clause |--------+   
   '-CHECK(-| check-condition |-)-'   

変更の始まり

period-definition:

変更の終わり
>>-PERIOD--+-SYSTEM_TIME---+------------------------------------>
           '-BUSINESS_TIME-'   

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

unique-constraint:

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

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

注:
  1. BUSINESS_TIME WITHOUT OVERLAPS が指定されている場合、BUSINESS_TIME 期間は、同じ column-name 値の期間においてオーバーラップしません。

referential-constraint:

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

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

references-clause:

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

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

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

check-constraint:

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

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

as-result-table:

>>-+-----------------------+--AS--(--fullselect--)--WITH NO DATA-><
   |    .-,-----------.    |                                       
   |    V             |    |                                       
   '-(----column-name-+--)-'                                       

copy-options:

   .-----------------------------.-COLUMN ATTRIBUTES-.-----------------.   
   V  (1)  .-EXCLUDING IDENTITY--+-------------------+-.               |   
>>-------+-+-------------------------------------------+-------------+-+-><
         | |                     .-COLUMN ATTRIBUTES-. |             |     
         | '-INCLUDING IDENTITY--+-------------------+-'             |     
         |                                   .-COLUMN ATTRIBUTES-.   |     
         | .-EXCLUDING ROW CHANGE TIMESTAMP--+-------------------+-. |     
         +-+-------------------------------------------------------+-+     
         | |                                 .-COLUMN ATTRIBUTES-. | |     
         | '-INCLUDING ROW CHANGE TIMESTAMP--+-------------------+-' |     
         |                  .-COLUMN-.                               |     
         |  (2).-EXCLUDING--+--------+--DEFAULTS-.                   |     
         +-----+---------------------------------+-------------------+     
         |     |            .-COLUMN-.           |                   |     
         |     +-INCLUDING--+--------+--DEFAULTS-+                   |     
         |     '-USING TYPE DEFAULTS-------------'                   |     
         |                              (3)                          |     
         '-EXCLUDING XML TYPE MODIFIERS------------------------------'     

注:
  1. これらの文節は、どのような順序でも指定できますが、複数回指定してはいけません。
  2. EXCLUDING COLUMN DEFAULTS、INCLUDING COLUMN DEFAULTS、および USING TYPE DEFAULTS を LIKE 文節で指定してはいけません。
  3. EXCLUDING XML TYPE MODIFIERS は、指定される表が XML タイプ修飾子を持っていて、新規表のどの XML 列も XML タイプ修飾子を持っていない場合は、LIKE 節とともに指定する必要があります。ビューが LIKE 節で指定されていて、そのビューが XML 列を含んでいる場合、EXCLUDING XML TYPE MODIFIERS はサポートされません。

materialized-query-definition

>>-+-----------------------+--AS--(fullselect)------------------>
   |    .-,-----------.    |                     
   |    V             |    |                     
   '-(----column-name-+--)-'                     

>--+-------------------------------+---------------------------><
   '-| refreshable-table-options |-'   

refreshable-table-options:

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

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

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

partitioning-clause:

                                .-,------------------------.      .-,---------------------.       
                   .-RANGE-.    V                          |      V                       |       
>>-PARTITION BY--+-+-------+--(---| partition-expression |-+-)--(---| partition-element |-+-)-+-><
                 '-SIZE--+----------------------------+---------------------------------------'   
                         '-EVERY--integer-constant--G-'                                           

partition-expression:

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

partition-element:

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

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

変更の始まり

organization-clause

変更の終わり
                                .-,-----------.      
                                V             |      
>>-ORGANIZE BY HASH--UNIQUE--(----column-name-+--)-------------->

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

説明

table-name
変更の始まり表の名前を指定します。変更の始まり名前 (暗黙修飾子または明示修飾子を含む) は、現行サーバーに存在する表、ビュー、別名、またはシノニムを示すものや、SYSIBM.SYSPENDINGOBJECTS カタログ表に存在する表を示すものであってはなりません。変更の終わり非修飾名は既存のシノニムと同じであってはなりません。

この名前を修飾する場合は、2 部構成または 3 部構成の名前にすることができます。3 部構成の名前を使う場合、最初の部分は、現行サーバーのインストール・パネル DSNTIPR の フィールド DB2® LOCATION NAME の値と一致していなければなりません。(現行サーバーがローカル DB2 でない場合、この名前は、 CURRENT SERVER 特殊レジスターに入っている名前と必ずしも 同じである必要はありません。)

変更の終わり

column-definition

column-name
表の列の名前を指定します。従属表については、749 列まで指定できます。従属表ではない表の場合、この数は 750 となります。column-name は修飾しないでください。また、表の複数の列に同じ名前を使ってはなりません。
built-in-type
列のデータ・タイプを以下の組み込みデータ・タイプの 1 つであると指定し、 文字ストリング・データ・タイプの場合は、サブタイプを指定します。LOB 列 (CLOB、BLOB、または DBCLOB) がある表の定義について詳しくは、LOB 列がある表の作成を参照してください。

変更の始まりIN ACCELERATOR が指定されている場合、すべてのデータ・タイプがサポートされるわけではありません。例えば、DECFLOAT、LOB、ROWID、TIMESTAMP WITH TIME ZONE、および XML はサポートされていません。「IBM DB2 Analytics Accelerator for z/OS: Stored Procedures Reference」に、サポートされているデータ・タイプの完全なリストが記載されています。変更の終わり

SMALLINT
短精度整数の場合。
INTEGER または INT
長精度整数の場合。
BIGINT
64 ビット整数の場合。
DECIMAL(integer,integer) または DEC(integer,integer)
DECIMAL(integer) または DEC(integer)
DECIMAL または DEC
10 進数の場合。最初の整数は数値の精度、 すなわち、数値の総桁数です。この範囲は 1 から 31 桁です。2 番目の整数は数値の位取り、 すなわち、小数点の右側に来る桁数です。この範囲は 0 からその数値の精度までです。

DECIMAL(p,0) の代わりに DECIMAL(p)、DECIMAL(5,0) の代わりに DECIMAL を使用できます。

また、DECIMAL の代わりに NUMERIC という語を使用することもできます。例えば、NUMERIC(8) は DECIMAL(8) と同等です。DECIMAL と異なり、NUMERIC に省略形はありません。

DECFLOAT(integer)
10 進浮動小数点数の場合。integer の値は、16 または 34 のいずれかでなければならず、格納できる 有効数字の桁数を表します。integer を省略した場合、DECFLOAT 列は 34 桁の有効数字を表現できます。
FLOAT(integer)
FLOAT
浮動小数点数の場合。integer が 1 から 21 の間の場合、形式は単精度浮動小数点になります。 integer が 22 から 53 の間の場合、形式は倍精度浮動小数点になります。

FLOAT(53) の代わりに DOUBLE PRECISION または FLOAT を使用できます。

REAL
単精度浮動小数点数の場合
DOUBLE または DOUBLE PRECISION
倍精度浮動小数点数の場合
CHARACTER(integer) または CHAR(integer)
CHARACTER または CHAR
長さの範囲が 1 から 255 の integer である固定長文字ストリングの場合。この長さ指定を省略すると、1 文字分の長さと見なされます。
VARCHAR(integer)CHAR VARYING(integer)、または CHARACTER VARYING(integer)
最長が integer である可変長文字ストリングの場合。この範囲は 1 から、最大レコード・サイズから 10 バイトを引いた値までです。 最大レコード・サイズを判別するには、表 3 を参照してください。
FOR subtype DATA
文字ストリング列、つまりデータ・タイプ CHAR、VARCHAR、または CLOB の列のサブタイプを指定します。 他のデータ・タイプ (すべての特殊タイプを含む) の列に対しては、FOR subtype DATA 文節を使用しないでください。subtype は次のいずれかです。
SBCS
列に 1 バイト・データが入ります。
MIXED
列に混合データが入ります。インストール・パネルの MIXED DATA フィールドの値が NO である場合 (ただし、CCSID UNICODE 文節も指定されていない場合)、または表を Unicode 表スペースまたはデータベースに作成する場合は、MIXED を指定しないでください。
BIT
列に BIT データが入ります。CLOB 列には BIT を指定しないでください。

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

FOR 文節を指定しないと、列はデフォルト・サブタイプで定義されます。ASCII また は EBCDIC データの場合、

  • インストール・パネル DSNTIPF の MIXED DATA フィールドの値が NO の場合、デフォルトは SBCS です。
  • 値が YES の場合、デフォルトは MIXED です。

Unicode データの場合、デフォルト・サブタイプは MIXED です。

セキュリティー・ラベル列は、表のコード化スキームに関係なく、常に SBCS データと見なされます。

CLOB(integer [K|M|G])、CHAR LARGE OBJECT(integer [K|M|G])、または CHARACTER LARGE OBJECT(integer [K|M|G])
CLOB、CHAR LARGE OBJECT、または CHARACTER LARGE OBJECT
文字ラージ・オブジェクト (CLOB) ストリングの場合。最大長はバイト数で指定します。最大長は、1 から 2 147 483 647 の範囲内で指定する必要があります。CLOB 列は可変長であり、最大長に関係なく一部のコンテキストでは参照できません。詳しくは 、LOB の使用に関する制約事項を参照してください。
integer を指定しない場合、デフォルトの長さは 1M です。integer に指定できる最大値は、以下のリストに示すように、単位標識 も指定されているかどうかによって異なります。
整数
integer の最大値は 2 147 483 647 です。ストリングの最長は integer です。
integer K
integer の最大値は 2 097 152 です。最長は 1024 と integer の積です。
integer M
integer の最大値は 2048 です。最長は 1 048 576 と integer の積です。
integer G
integer の最大値は 2 です。最大長は 1 073 741 824 と integer の積です。

2 ギガバイト (2 147 483 648) と評価される値を指定すると 、DB2 はそれより 1 バイト少ない値、すなわち 2 147 483 647 を使用します。

GRAPHIC(integer)
GRAPHIC
長さの範囲が 1 から 127 までの integer である 固定長グラフィック・ストリングの場合。この長さ指定を省略すると、1 文字分の長さと見なされます。
VARGRAPHIC(integer)
最長が integer である 可変長グラフィック・ストリングの場合。この範囲は 1 から n/2 (n は 最大行サイズから 2 バイトを引いた値) までです。
DBCLOB(integer [K|M|G])
DBCLOB
2 バイト文字ラージ・オブジェクト (DBCLOB) ストリングの場合。最大長は、2 バイト文字の個数で指定します。最大長は、1 から 1 073 741 823 の範囲内で指定する必要があります。DBCLOB 列は可変長であり、最大長に関係なく一部のコンテキストでは参照できません。詳しくは 、LOB の使用に関する制約事項を参照してください。

integer を指定しない場合、デフォルトの長さは 1M です。integer K|M|G の意味は、CLOB の場合と同じです。違いは、指定される数が 2 バイト文字数である点です。

BINARY(integer)
長さが integer の固定長バイナリー・ストリング。integer の範囲は 1 から 255 です。この長さ指定を省略すると、1 バイト分の長さと見なされます。
BINARY VARYING(integer) または VARBINARY(integer)
最大長が integer である可変長バイナリー・ストリング。長さの範囲は 1 から 32704 です。長さは表スペースのページ・サイズによって制限されます。
BLOB (integer [K|M|G] または BINARY LARGE OBJECT(integer [K|M|G])
BLOB または BINARY LARGE OBJECT
バイナリー・ラージ・オブジェクト (BLOB) ストリングの場合。最大長はバイト数で指定します。最大長は、1 から 2 147 483 647 の範囲内で指定する必要があります。BLOB 列は可変長であり、最大長に関係なく一部のコンテキストでは参照できません。詳しくは 、LOB の使用に関する制約事項を参照してください。

integer を指定しない場合、デフォルトの長さは 1M です。 integer K|M|G の意味は、CLOB の場合と同じです。

DATE
日付の場合。
TIME
時刻の場合。
変更の始まりTIMESTAMP(integer) WITHOUT TIME ZONE変更の終わり
変更の始まりタイム・スタンプの場合。integer はオプションのタイム・スタンプ精度属性を指定します。これは、0 から 12 の範囲内になければなりません。タイム・スタンプ精度は、タイム・スタンプに含める秒の小数点以下の桁数を示します。デフォルトは 6 です。変更の終わり
変更の始まりTIMESTAMP(integer) WITH TIME ZONE変更の終わり
変更の始まりタイム・ゾーン付きタイム・スタンプの場合。integer はオプションのタイム・スタンプ精度属性を指定します。これは、0 から 12 の範囲内になければなりません。タイム・スタンプ精度は、タイム・スタンプに含める秒の小数点以下の桁数を示します。デフォルトは 6 です。変更の終わり
ROWID
行 ID タイプの場合。

表には 1 つの ROWID 列しか含めることはできません。 ROWID 列の値は、その表のすべての行に対して固有で、 更新できません。ROWID とともに NOT NULL を指定する必要があります。

XML
XML 文書の場合。XML 列に挿入できるのは整形式 XML 文書のみです。

変更の始まりXML 列が表に対して最初に作成した XML 列である場合、BIGINT DOCID 列が暗黙的に作成され、行の XML 列の固有の文書 ID を保存するために使用されます。変更の終わり

変更の始まりXMLSCHEMA変更の終わり
変更の始まりXML 値の検証に使用される 1 つ以上の XML スキーマを指定します。同じ XML スキーマを複数回指定することはできません。

XML 値が既に検証されていて (例えば、XML 値が DSN_XMLVALIDATE 関数の結果、またはタイプ修飾子を持つ XML 列の値であるなど)、XML 値の検証対象の XML スキーマが XML-type-modifier で指定されたいずれかのスキーマである場合、DB2 は再検証を行わずに XML 値を受け入れます。

XML-schema-specification
1 つの XML スキーマを指定します。XML スキーマは、登録済み XML-schema-name、またはスキーマのターゲット名前空間と後続のオプションのスキーマ・ロケーションのいずれかを使用することにより識別できます。この節で参照されるすべての XML スキーマは、使用前に XML スキーマ・リポジトリーに登録されている必要があります。
ID registered-XML-schema-name
registered-XML-schema-name を使用して XML スキーマを識別します。 この名前は、現行サーバーの XML スキーマ・リポジトリー内の既存の XML スキーマを一意的に識別する必要があります。この名前の XML スキーマが存在しない場合、エラーが戻されます。

スキーマ修飾子は SYSXSR である必要があります。

URI target-namespace
XML スキーマのターゲット名前空間 URI を指定します。target-namespace URI の値は、空でない文字ストリング定数です。URI は登録済み XML スキーマのターゲット名前空間である必要があり、LOCATION 節が指定されていない場合は、登録済み XML スキーマを一意的に識別する必要があります。
NO NAMESPACE
XML スキーマがターゲット名前空間を持たないことを指定します。ターゲット名前空間を持たない登録済みの XML スキーマが存在する必要があります。LOCATION 節が指定されていない場合は、そのような登録済み XML スキーマは 1 つしかあってはなりません。
LOCATION schema-location
XML スキーマの XML スキーマ・ロケーション URI を指定します。schema-location の値は、空でない文字ストリング定数です。スキーマ・ロケーション URI とターゲット名前空間 URI の組み合わせは、登録済み XML スキーマを識別する必要があります。
ELEMENT element-name
グローバル・エレメント宣言の名前を指定します。element-name は、インスタンス XML 文書のルート・エレメント・ノードのローカル名に一致する必要があります。ルート・エレメント・ノードの名前空間は、ターゲット名前空間 URI と同じである必要があります。
変更の終わり
distinct-type-name
列のデータ・タイプが特殊 タイプ (ユーザー定義のデータ・タイプ) であることを指定します。列の長さ、 精度、および位取りは、それぞれ、特殊タイプのソース・タイプの長さ、精度、および位取りです。特権セットには、特殊タイプの USAGE 特権が暗黙的または明示的に含まれている必要があります。

特殊タイプのコード化スキームは表のコード化スキームと同じでなければなりません。 特殊タイプのサブタイプは、属性がある場合は、特殊タイプが作成された際のサブタイプです。

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

NOT NULL
列が NULL 値を含まないようにします。NOT NULL を省略すると、列が NULL 値を格納できることが暗黙指定されます。
column-constraint
column-definitioncolumn-constraint を指定すると、単一列で構成されている制約の定義が簡略化されます。つまり、列 C の定義に column-constraint を指定すると、C を唯一の列として示した unique-constraintreferential-constraint、または check-constraint としてその制約を指定した場合と同じ効果が得られます。
CONSTRAINT constraint-name
制約の名前を指定します。制約名を指定しないと、ユニーク制約名が生成されます。名前を指定する場合には、以前に表で指定した参照、検査、主キー、またはユニーク・キーの制約の いずれの名前とも異なっていなければなりません。
PRIMARY KEY
単一列から構成される主キーを定義するための簡略化 された方法を提供します。例えば、PRIMARY KEY を列 C の定義で指定すると、 PRIMARY KEY(C) 文節を別の文節として指定するのと同じ 効果があります。
NOT NULL 文節をこの文節と共に指定しなければなりません。PRIMARY KEY は、列定義において複数回指定することはできず、定義に UNIQUE 文節が指定されている場合には指定できません。 この文節は、定義が以下のいずれかのタイプの列に関するものである場合にも指定できません。
  • LOB 列
  • ROWID 列
  • DECFLOAT 列
  • LOB、ROWID、または DECFLOAT データ・タイプに基づく特殊タイプ列
  • XML 列
  • 行変更タイム・スタンプ列
  • 変更の始まりアクセラレーターのみの表の列変更の終わり

1 次索引が明示的に作成されるまで、その表は使用不能として印が付けられます。ただし、CREATE TABLE ステートメントがスキーマ・プロセッサーで処理される 場合、あるいは表を含む表スペースが暗黙的に作成された場合の 2 つの条件の場合はその限りではありません。その場合は 、DB2 は暗黙的に索引を作成し、主キーが固有 になるようにし、表定義は完了したと見なされます。(暗黙的に作成された索引について詳しくは 、暗黙的に作成された索引を参照してください。)

UNIQUE
単一列から構成されるユニーク・キーを定義するための簡略化 された方法を提供します。例えば、UNIQUE を列 C の定義で指定すると、 UNIQUE(C) 文節を別の文節として指定するのと同じ 効果があります。
NOT NULL 文節をこの文節と共に指定しなければなりません。UNIQUE は、列定義において複数回指定することはできず、列定義で PRIMARY KEY 文節が指定されている場合、または定義が以下のいずれかのタイプの列に関するものである場合には指定できません。
  • LOB 列
  • ROWID 列
  • DECFLOAT 列
  • LOB、ROWID、または DECFLOAT データ・タイプに基づく特殊タイプ列
  • XML 列
  • 行変更タイム・スタンプ列
  • 変更の始まりアクセラレーターのみの表の列変更の終わり

必要なすべての索引が明示的に作成されるまで、その表は使用不能として印が付けられます。ただし、CREATE TABLE ステートメントがスキーマ・プロセッサーで処理される 場合、あるいは表を含む表スペースが暗黙的に作成された場合の 2 つの条件の場合はその限りではありません。その場合は 、DB2 はユニーク・キーに必要な索引を暗黙的に作成し、 表定義は完了したと見なされます。(暗黙的に作成された索引について詳しくは 、暗黙的に作成された索引を参照してください。)

references-clause
column-definition references-clause を 指定すると、単一列で構成されている外部キーの定義が簡略化されます。 したがって、列 C の定義で references-clause を指定すると、C が唯一の識別される列である FOREIGN KEY 文節の一部として references-clause を指定した場合と同じ効果があります。
以下のタイプの列の定義には references-clause を指定しないでください。これらのタイプの列を外部キーにすることはできないからです。
  • LOB 列
  • ROWID 列
  • DECFLOAT 列
  • LOB、ROWID、または DECFLOAT データ・タイプに基づく特殊タイプ列
  • XML 列
  • 行変更タイム・スタンプ列
  • セキュリティー・ラベル列
CHECK (check-condition)
CHECK (check-condition) は、単一列に適用されるチェック制約の定義を簡略化します。 SQL 標準に準拠するため、列 C の列定義に CHECK を指定した場合は、チェック制約のチェック条件の中で C 以外の列を参照してはなりません。効果は、チェック条件を別の文節として指定した場合と同じです。
DEFAULT
挿入操作、更新操作、または LOAD に値が指定されていない場合に、列に割り当てられるデフォルト値を指定します。同じ column-definition 内で DEFAULT を複数回指定してはいけません。 次のタイプの列に対しては、DEFAULT を指定しないでください。その理由は、DB2 がデフォルト値を生成するからです。
  • ID 列 (AS IDENTITY として定義される列)
  • ROWID 列 (または ROWID に基づく特殊タイプ)
  • 行変更タイム・スタンプ列
  • 変更の始まり行開始列変更の終わり
  • 変更の始まり行終了列変更の終わり
  • 変更の始まりtransaction-start-id変更の終わり
  • XML 列

変更の始まりIN ACCELERATOR が指定されている場合、列に対して DEFAULT を指定しないでください。変更の終わり

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

DEFAULT の後に値が指定されていない場合、デフォルト値として 使用される値は、次のように列のデータ・タイプによって異なります。
データ・タイプ
デフォルト値
数値
0
64 ビット整数
0
固定長文字ストリング
ブランク
固定長グラフィック・ストリング
ブランク
固定長バイナリー・ストリング
16 進数のゼロ
可変長ストリング
長さが 0 のストリング
変更の始まりインライン BLOB変更の終わり
変更の始まり16 進数のゼロ変更の終わり
変更の始まりインライン CLOB変更の終わり
変更の始まりブランク変更の終わり
変更の始まりインライン DBCLOB変更の終わり
変更の始まりブランク変更の終わり
日付
CURRENT DATE
時刻
CURRENT TIME
変更の始まりTIMESTAMP(integer) WITHOUT TIME ZONE変更の終わり
変更の始まりCURRENT TIMESTAMP(p) WITHOUT TIME ZONE (p は対応するタイム・スタンプ精度)変更の終わり
変更の始まりTIMESTAMP(integer) WITH TIME ZONE変更の終わり
変更の始まりCURRENT TIMESTAMP(p) WITH TIME ZONE (p は対応するタイム・スタンプ精度)。

列がタイム・ゾーンの指定されたタイム・スタンプとして定義されている場合、デフォルト値にタイム・ゾーンを含める必要があります。

変更の終わり
特殊タイプ
ソース・データ・タイプのデフォルト値

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

  • デフォルト値を空ストリングにする場合は WITH DEFAULT
  • デフォルト値を NULL にする場合は DEFAULT NULL

ID 列以外の列で NOT NULL と DEFAULT を column-definition から省略すると、DEFAULT NULL が暗黙指定されます。ID 列の場合は、暗黙的に NOT NULL を指定したことになり 、DB2 はデフォルト値を生成します。

constant
列のデフォルト値として定数を指定します。定数の値は、その値を列に割り当てるときの規則に適合して いなければなりません。

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

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

SESSION_USER または USER
列のデフォルト値として、SQL データ変更ステートメントまたは LOAD 時点での SESSION_USER (USER) 特殊レジスターの値を指定します。SESSION_USER を指定する場合、列のデータ・タイプは、値を CCSID 37 で表現するときは 8 文字以上の長さ属性をもつ文字ストリングでなければなりません。変更の始まり列のデータ・タイプがインライン CLOB である場合に値を CCSID 37 で表現する場合、INLINE LENGTH 属性は、8 文字以上でなければなりません。変更の終わり
CURRENT SQLID
列のデフォルト値として、挿入または更新操作あるいは LOAD 時点の処理の SQL 許可 ID の値 を指定します。CURRENT SQLID を指定する場合、列のデータ・タイプは、CURRENT SQLID 特殊レジスターの長さ属性以上の長さ属性をもつ文字ストリングでなければなりません。変更の始まり列のデータ・タイプがインライン CLOB である場合、INLINE LENGTH 属性は、CURRENT SQLID 特殊レジスターの長さ属性以上でなければなりません。変更の終わり
NULL
列のデフォルト値として NULL を指定します。NOT NULL を指定する場合は、同じ column-definition に DEFAULT NULL を指定してはいけません。
cast-function-name
列の特殊タイプの名前と一致する cast 関数の名前。cast 関数は、列のデータ・タイプが特殊タイプである場合にだけ使用できます。

cast 関数のスキーマ名は、明示的に指定されているか、または関数解決を介して暗黙的に解決されるかに関係なく、特殊タイプの 明示的または暗黙的に指定されているスキーマ名と同じでなければなりません。

constant
引数として定数を指定します。この定数は、特殊タイプのソース・タイプの定数に関する規則に準拠している必要があります。変更の始まり定数の長さが、LOB 列の INLINE LENGTH 属性を超えることはできません。変更の終わり
SESSION_USER または USER
変更の始まり行が挿入された時点での SESSION_USER (USER) 特殊レジスターの値を、列のデフォルトとして指定します。 列の特殊タイプのソース・タイプは、SESSION_USER 特殊レジスターの長さ属性以上の長さ属性 (CLOB の場合はインライン長さ属性) を持つ CHAR、VARCHAR、またはインライン CLOB でなければなりません。変更の終わり
CURRENT SQLID
行が挿入された時点での CURRENT SQLID 特殊レジスターの値を、列のデフォルトとして指定します。 列の特殊タイプのソース・タイプは、CURRENT SQLID 特殊レジスターの長さ属性以上の長さ属性 (または CLOB の場合はインライン長さ属性) を持つ CHAR、VARCHAR、またはインライン CLOB でなければなりません。
NULL
引数として NULL 値を指定します。

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

  • DEFAULT と FIELDPROC を両方とも指定することはできません。
  • NOT NULL と DEFAULT NULL を両方とも指定することはできません。
表 1 に、CREATE TABLE ステートメントの column-description 文節 に NOT NULL および DEFAULT 文節のさまざまな組み合わせを指定したときの影響を要約します。
表 1. NOT NULL および DEFAULT 文節の組み合わせ指定の影響
NOT NULL: DEFAULT: 影響:
指定する1 省略する 挿入または更新操作あるいは LOAD の列に値が指定されな い場合、エラーが発生します。
オペランドなしで指定する システム定義の非 NULL 値のデフォルト値が使用されます。
constant 指定した定数がデフォルト値として使用されます。
SESSION_USER 挿入または更新操作あるいは LOAD 時の SESSION_USER 特殊レジスターの値がデフォルト値として使用されます。
CURRENT SQLID 挿入または更新操作あるいは LOAD 時点の処理の SQL 許可 ID が デフォルト値として使用されます。
NULL CREATE TABLE の実行時にエラーが発生します。
省略する 省略する DEFAULT NULL を暗黙的に指定したことと同じになります。
オペランドなしで指定する システム定義の非 NULL 値のデフォルト値が使用されます。
constant 指定した定数がデフォルト値として使用されます。
SESSION_USER 実行時の SESSION_USER 特殊レジスターの値がデフォルト値として使用されます。
CURRENT SQLID プロセス の SQL 許可 ID がデフォルト値として使用されます。
NULL デフォルト値として NULL 値が使用されます。
注: この表は、ROWID データ・タイプの列または ID 列には適用されません。
GENERATED
DB2 が列の値を生成することを示します。列を次のいずれかのタイプの列に統合する場合には、GENERATED を指定する必要があります。
  • ID 列
  • 行変更タイム・スタンプ列
  • ROWID 列
  • 変更の始まり行開始列変更の終わり
  • 変更の始まり行終了列変更の終わり
  • 変更の始まりtransaction-start-id変更の終わり

変更の始まりこれらのタイプの列には GENERATED のみを指定する必要があります。GENERATED は、列定義内に default-clause とともに指定してはなりません。in変更の終わり

ALWAYS
行を挿入または更新し、かつデフォルト値を生成する必要がある場合、DB2 で常に列の値を生成することを指定します。ALWAYS はデフォルトであり、推奨値です。
BY DEFAULT
行の挿入時または更新時に DB2 によって列の値が生成され、また明示的に値が生成されていない場合はデフォルト値が生成される必要があることを指定します。

変更の始まり行変更タイム・スタンプ列の場合、DB2 は指定された値を挿入または更新します。ただし、行変更タイム・スタンプ列に、行変更タイム・スタンプ列のみを指定するユニーク索引またはユニーク制約がない限り、行変更タイム・スタンプ列の値が列で固有な値であるかどうかは検証しません。変更の終わり

ROWID 列の場合、DB2 が指定された値を使用するのは、その値が、以前に DB2 によって生成された有効な行 ID 値で、列に固有の単一列の索引がある場合だけです。ROWID 列にこの索引が作成されるまで、SQL の挿入操作 または更新操作および LOAD ユーティリティーを使用して表に行を追加することはできません。 表スペースが明示的に作成され、CREATE TABLE ステートメントの処理時に CURRENT RULES 特殊レジスター の値が「STD」である場合、あるいは表スペースが暗黙的に作成された場合には 、DB2 は暗黙的に ROWID 列に索引を作成します。 この索引の名前は、「I」の後に列名の最初の 10 文字を続け、さらにランダムに生成された 7 文字が続いたものです。 列名が 10 文字より短い場合、DB2 は名前の最後に 10 文字になるまで下線文字を追加します。暗黙的に作成された索引の属性は COPY NO です。

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

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

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

1 つの表には 1 つの行変更タイム・スタンプ列しか入りません。

変更の始まりdata-type を指定する場合、これは精度 6 の TIMESTAMP WITHOUT TIME ZONE でなければなりません。変更の終わり

行変更タイム・スタンプ列に DEFAULT 文節を指定することはできません。行変更タイム・スタンプ列には NOT NULL を指定する必要があります。

変更の始まりAS TRANSACTION START ID変更の終わり
変更の始まり表に行が挿入されるか、または行内の列が更新されるときに、必ず DB2 によって値が割り当てられることを指定します。DB2 は、トランザクションごとに固有のタイム・スタンプ値、または NULL 値を割り当てます。その列が NULL 可能である場合、NULL 値がトランザクション開始 ID 列に割り当てられます。それ以外の場合、値は、表の行開始列またはトランザクション開始 ID 列への値の割り当てを必要とするトランザクションでの最初のデータ変更ステートメントの実行中、またはシステム期間テンポラル表の行が削除されるときに、時刻機構を使用して生成されます。単一 SQL トランザクション内で複数の行が挿入または更新される場合、トランザクション開始 ID 列の値は、すべての行について同じであり、別のトランザクションでその列に対して生成される値からは固有です。

システム期間テンポラル表にはトランザクション開始 ID 列が必要です。

1 つの表は 1 つのトランザクション開始 ID 列しか持てません。データ・タイプが指定されていない場合、列は TIMESTAMP(12) WITHOUT TIME ZONE として定義されます。データ・タイプが指定されている場合、これは TIMESTAMP(12) WITHOUT TIME ZONE または TIMESTAMP(12) WITH TIME ZONE でなければなりません。列を TIMESTAMP WITH TIME ZONE として定義すると、値は +00:00 のタイム・ゾーンを使用して UTC に保管されます。トランザクション開始 ID 列には DEFAULT 節を指定できません。 トランザクション開始 ID 列は更新できません。

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

変更の終わり
変更の始まりAS ROW BEGIN変更の終わり
変更の始まり列がタイム・スタンプ・データを含み、値が DB2 によって生成されることを指定します。DB2 は、行の挿入時に行ごとに、およびいずれかの列が更新されるすべての行について、列の値を生成します。生成される値は、最新のトランザクションに関連付けられている開始時刻に対応するタイム・スタンプです。単一の SQL 作業単位で複数の行が挿入される場合、トランザクション開始タイム・スタンプ列の値は同一になります。

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

システム期間テンポラル表の場合、DB2 により、トランザクション間で行開始列の生成値の一意性が確保されます。単一 SQL トランザクション内で複数の行が挿入または更新される場合、行開始列の値は、すべての行について同じであり、別のトランザクションでその列に対して生成される値からは固有です。行開始列は、SYSTEM_TIME 期間の開始列として必要です。

変更の始まり表では、AS ROW BEGIN として 1 列だけ定義できます。データ・タイプが指定されている場合、これは TIMESTAMP(12) WITHOUT TIME ZONE または TIMESTAMP(12) WITH TIME ZONE でなければなりません。列を TIMESTAMP(12) WITH TIME ZONE として定義すると、値は +00:00 のタイム・ゾーンを使用して UTC に保管されます。データ・タイプが指定されていない場合、列は TIMESTAMP(12) WITHOUT TIME ZONE として定義されます。行開始列として定義されている列には DEFAULT 節を指定できません。またこの列は NOT NULL として定義されている必要があります。変更の終わり

行開始列は更新できません。

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

変更の終わり
変更の始まりAS ROW END変更の終わり
変更の始まり行が挿入されるか、または行内の列が更新される場合に、必ず列のデータ・タイプに対する値が DB2 によって割り当てられるように指定します。TIMESTAMP WITHOUT TIME ZONE 列に割り当てられる値は、「9999-12-30-00.00.00.000000000000」です。 TIMESTAMP WITH TIME ZONE 列に割り当てられる値は、TIMESTAMP 値「9999-12-30-00.00.00.000000000000 +00:00」です。

行終了列は、SYSTEM_TIME 期間の 2 番目の列として必要です。

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

変更の終わり
AS IDENTITY
列が表の ID 列であることを指定します。表には 1 つの ID 列しか入りません。AS IDENTITY が指定できるのは、列のデータ・タイプが位取りゼロの正確な数値タイプ (SMALLINT、INTEGER、BIGINT、位取りゼロの DECIMAL、またはこれらのタイプの 1 つに基づく特殊タイプ) である場合に限定されます。

ID 列は暗黙的に NOT NULL になります。ID 列に WITH DEFAULT 文節を指定することはできません。

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

変更の始まりIN ACCELERATOR が指定されている場合、AS IDENTITY を指定してはなりません。変更の終わり

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

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

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

この値が負の場合、ID 列の値は降順になります。この値が 0 または正の場合、ID 列の値は昇順になります。デフォルトは、1 です。

MINVALUE または NO MINVALUE
降順の ID 列が循環するか値の生成を停止する最小値、または昇順の ID 列が最大値に達した後で循環する先の最小値を指定します。
NO MINVALUE
ID 列の値の範囲に最小端点を設定しないように指定します。この場合、MINVALUE のデフォルト値は次のいずれかになります。
  • 昇順の ID 列の場合、値は START WITH の値、または 1 (START WITH が指定されていない場合)。
  • 降順の ID 列の場合、値は列のデータ・タイプの最小値。

デフォルトは NO MINVALUE です。

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

デフォルトは NO MAXVALUE です。

MAXVALUE numeric-constant
この ID 列に生成される最大値である数値定数を指定します。この値は、この列に割り当て可能な正または負の数で、小数点の右側にゼロ以外の数字がないように指定します。値は、最小値以上にする必要があります。
CYCLE または NO CYCLE
この ID 列が、最大値または最小値のいずれかに達した後で、引き続いて値を生成するかどうかを指定します。 デフォルトは NO CYCLE です。
NO CYCLE
最大値または最小値に達した後、ID 列に値を生成しないことを指定します。
CYCLE
最大値または最小値に達した後、ID 列の値の生成を続行することを指定します。このオプションを使用すると、昇順の ID 列が最大値に達した後、最小値が生成されます。降順の ID 列が最小値に達した後は、最大値が生成されます。ID 列の最大値と最小値により、循環に使用される範囲が決まります。

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

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

データ共有環境では、ID 列値とシーケンス値が要求される順序で生成されることを保証する必要がある場合は、NO CACHE を使用してください。

CACHE integer-constant
DB2 がメモリーに事前に割り振って保管できる ID 列シーケンスの値の最大数を指定します。

DB2 シャットダウン中に、キャッシュに入っていてまだ割り当てられていない ID 列値およびシーケンス値はすべて失われ、使用できなくなります。そのため、CACHE に指定される値は、DB2 シャットダウン時に失われる ID 列値とシーケンス値の最大数も表します。

最小値は 2 です。

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

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

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

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

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

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

constant
これは、呼び出されたときにフィールド・プロシージャーに渡されるパラメーターです。パラメーター・リストはオプションです。CREATE TABLE の FIELDPROC 文節で指定した n 番目の パラメーターは、指定したフィールド・プロシージャーの n 番目 のパラメーターに対応しています。パラメーター・リストの最長は 254 バイトです。コンマは この長さに含まれますが、無意味なブランクや区切りの括弧は含まれません。

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

AS SECURITY LABEL
列にセキュリティー・ラベル値を格納するように指定します。また、表に対して行レベルの細分性のマルチレベル・セキュリティーを定義するように指定します。表にはセキュリティー・ラベル列を 1 つだけ指定できます。アクセラレーターのみの表に対してセキュリティー・ラベル列を定義することはできません。表にセキュリティー・ラベル列を定義するには、ステートメントの 1 次許可 ID に有効なセキュリティー・ラベルがあり 、RACF® SECLABEL クラスがアクティブになっている必要があります。また、次の条件も満たしている必要があります。
  • 列のデータ・タイプが CHAR(8) である。
  • 列のサブタイプが SBCS である。
  • 列が NOT NULL 文節と WITH DEFAULT 文節を使用して定義されている。
  • WITH DEFAULT 文節でデフォルト値を指定してはなりません (デフォルト値 は DB2 が決定します)。
  • 列にフィールド・プロシージャー、チェック制約、または参照制約が定義されていない。
  • 表に対して、行属性のセンシティビティーを指定して編集プロシージャーを定義することはできません。

マルチレベル・セキュリティーの使用については、 「DB2 管理ガイド」を参照してください。

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

変更の始まりIMPLICITLY HIDDEN は、ROWID として定義される列、または ROWID に基づく特殊タイプに対して指定してはいけません。表のすべての列に対して IMPLICITLY HIDDEN を指定してはいけません。IN ACCELERATOR が指定されている場合、IMPLICITLY HIDDEN を指定してはなりません。変更の終わり

変更の始まりINLINE LENGTH integer変更の終わり
変更の始まり列が LOB 列であり、表がユニバーサル表スペースに存在する場合の列の最大長を指定します。列が LOB 列 (または LOB に基づく特殊タイプ) でない場合、表がユニバーサル表スペースでない場合、または表がアクセラレーターのみの表である場合は、INLINE LENGTH を指定できません。

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

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

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

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

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

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

変更の終わり

period-definition

変更の始まりPERIOD変更の終わり
変更の始まり表の期間を定義します。begin-column-name は、end-column-name と同じであってはなりません。begin-column-name のデータ・タイプ、長さ、精度、および位取りは、end-column-name と同じでなければなりません。

変更の始まりIN ACCELERATOR が指定されている場合、PERIOD を指定してはなりません。変更の終わり

SYSTEM_TIME (begin-column-name,end-column-name)
名前 SYSTEM_TIME でシステム期間を定義します。表内に名前 SYSTEM_TIME の列があってはなりません。表に指定できる SYSTEM_TIME 期間は 1 つのみです。begin-column-name は AS ROW BEGIN として定義し、end-column-name は AS ROW END として定義する必要があります。
BUSINESS_TIME (begin-column-name,end-column-name)
名前 BUSINESS_TIME を使用してアプリケーション期間を定義します。表内に名前 BUSINESS_TIME の列があってはなりません。表に指定できる BUSINESS_TIME 期間は 1 つのみです。begin-column-name および end-column-name は、DATE または TIMESTAMP(6) WITHOUT TIME ZONE として定義する必要があり、列は NOT NULL として定義する必要があります。begin-column-nameend-column-name は、GENERATED 節を使用して定義されている列を識別してはなりません。

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

begin-column-name
行が有効である期間の開始を記録する列を指定します。この名前は、表内に存在する列を識別する必要があり、その表の別の期間の定義に使用されている列と同じであってはなりません。begin-column-name は、end-column-name と同じであってはなりません。begin-column-name のデータ・タイプと精度は、end-column-name と同じでなければなりません。

SYSTEM_TIME 期間の場合、begin-column-name は AS ROW BEGIN として定義する必要があります。

BUSINESS_TIME 期間の場合、列は GENERATED 節で定義されていてはなりません。

end-column-name
行が有効である期間の終了を記録する列を指定します。システム期間テンポラル表に関連付けられた履歴表で、システム期間テンポラル表の end-column-name に対応する履歴表の列はその行の削除を反映するように設定されます。この名前は、表内に存在する列を識別する必要があり、その表の別の期間の定義に使用されている列と同じであってはなりません。

SYSTEM_TIME 期間の場合、end-column-name は AS ROW END として定義する必要があります。

BUSINESS_TIME 期間の場合、列は GENERATED 節で定義されていてはなりません。

変更の終わり

unique-constraint

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

指定する列の数は 64 を超えてはいけません。また、列の長さ属性の合計が 2000 - 2m を超えてはいけません (ここで、m はキーの可変長列の数)。

1 次索引が明示的に作成されるまで、その表は使用不能としてマークが付けられます。ただし、表スペースが明示的に作成され、CREATE TABLE ステートメントがスキーマ・プロセッサーで処理される場合、あるいは 表スペースが暗黙的に作成された場合は、その限りではありません。その場合は 、DB2 は暗黙的に索引を作成し、主キーが固有 になるようにし、表定義は完了したと見なされます。(暗黙的に作成された索引について詳しくは 、暗黙的に作成された索引を参照してください。)

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

指定する列の数は 64 を超えてはいけません。また、列の長さ属性の合計が 2000 - 2m を超えてはいけません (ここで、m はキーの可変長列の数)。

ユニーク・キーは、主キーまたは既に定義済みのユニーク・キーと同じ 場合に、重複キーとなります。重複するユニーク・キーを指定すると、警告が出て無視されます。

表スペースが明示的に作成され、CREATE TABLE ステートメントがスキーマ・プロセッサーで処理される場合、あるいは 表スペースが暗黙的に作成された場合以外は、必要なすべての索引が明示的に作成されるまで、その表は使用不能としてマークが付けられます。このような場合は 、DB2 はユニーク・キーに必要な索引を暗黙的に作成し、表定義は完了したと見なされます。(暗黙的に作成された索引について詳しくは 、暗黙的に作成された索引を参照してください。)

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

referential-constraint

CONSTRAINT constraint-name
参照制約の名前を指定します。制約名を指定しないと、ユニーク制約名が生成されます。名前を指定する場合、その名前は以前に表に指定した参照制約、チェック制約、主キー制約、またはユニーク・キー制約のいずれの名前とも異なるものでなければなりません。
FOREIGN KEY (column-name,...) references-clause
FOREIGN KEY 文節を指定するたびに、参照制約が定義されます。作成されている表は、参照制約の子表です。
参照制約の外部キーは、指定された列 この column-name は、表の列を識別する非修飾 名でなければなりません。同じ列を複数回指定してはいけません。 列は、以下のいずれのタイプの列にすることもできません。
  • LOB 列
  • ROWID 列
  • DECFLOAT 列
  • XML 列
  • 行変更タイム・スタンプ列
  • セキュリティー・ラベル列
  • 変更の始まりアクセラレーターのみの表の列変更の終わり

指定する列の数は 64 を超えてはなりません。 列の長さ属性の合計は、255 から NULL 値を許可する列の数を引いた値を超えてはなりません。FOREIGN KEY および親表が、既に定義済みの参照制約の FOREIGN KEY お よび親表と同じ場合に、参照制約は重複します。重複する参照制約を指定すると、警告が出て無視されます。

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

REFERENCES table-name (column-name,...)
REFERENCES の後に指定される表名は、 は、現行サーバーに存在する表を示していなければなりません。1表の名前は、以下のいずれの表にもできません。
  • カタログ表
  • 変更の始まりディレクトリー表変更の終わり
  • 宣言済みグローバル一時表
  • 変更の始まり履歴表変更の終わり
以下の解説で、T2 がここで指定する表、T1 は作成している表を 示すものとします (T1 と T2 を同じ表にすることはできません1)。

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

参照制約の親キーは、指定された列から構成されます。この column-name は、T2 の列を識別する非修飾 名でなければなりません。同じ列を複数回指定してはいけません。 指定される列は、以下のタイプの列であってはなりません。
  • LOB 列
  • ROWID 列
  • DECFLOAT 列
  • XML 列
  • 行変更タイム・スタンプ列
  • セキュリティー・ラベル列

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

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

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

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

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

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

外部キーのいずれかの列を NULL 値にすることができる場合を 除いて、SET NULL を指定してはなりません。規則のデフォルト値は、CREATE TABLE ステートメントが処理されるときの CURRENT RULES 特殊レジスターの値によって決まります。レジスターの値が「DB2」の場合は、削除規則のデフォルトは RESTRICT です。値が「STD」の場合は、削除規則のデフォルト値は NO ACTION です。

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

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

T3 が、CREATE TABLE ステートメントの別の FOREIGN KEY 文節で 指定された表を表すものとします。T2 と T3 がそれぞれ関係する削除規則は同じでなければなりません。また、次の場合は SET NULL を指定してはいけません。

  • T2 と T3 が同じ表である。
  • T2 が T3 の下層表であり、T3 から行を削除するとそれが T2 にカスケードする。
  • T2 と T3 がともに同じ表の下層表であり、その表から行を 削除するとそれが T2 と T3 の両方にカスケードする。
ENFORCED または NOT ENFORCED
挿入、更新、削除などの通常操作中に 、DB2 によって参照制約を適用するかどうか指定します。
ENFORCED
通常操作 (挿入、更新、削除など) 中に 、DB2 によって参照制約が適用され、その参照制約の正しさが保証されることを指定します。これはデフォルトです。
NOT ENFORCED
挿入、更新、削除などの通常操作中に 、DB2 によって参照制約が適用されないことを 指定します。このオプションは、表に格納されるデータが制約に準拠していることが、データベース・マネージャーに依存しない他の方式によって検査済みの場合に限って使用してください。
ENABLE QUERY OPTIMIZATION
照会を最適化するためにこの制約を使用できることを指定します。DB2 は、この制約が正しいことを前提として、マテリアライズ照会表を使用して照会を最適化する際にこの情報を使用します。これはデフォルトです。

check-constraint

CONSTRAINT constraint-name
チェック制約の名前を指定します。制約名は、以前に表で指定した参照、検査、主キー、 またはユニーク・キーの制約のいずれの名前とも異なっていなければなりません。

constraint-name を指定しない場合、チェック制約の定義で指 定した check-condition の最初の列名から、ユニーク制約名が導き出されます。

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

LIKE

table-name または view-name
表の列が、指定した表またはビューの列と完全に同じ名前と 記述を持つように指定します。

変更の始まりLIKE の後に指定する名前は、現行サーバーまたは宣言された一時表に存在する表またはビューであることが必要です。ビューは、長さ 0 の列を含むことはできません。変更の終わり

変更の始まりLIKE は、アクセラレーターのみの表を参照することも、IN ACCELERATOR 文節で使用することもできません。変更の終わり

特権セットは指定された表またはビューの SELECT 特権を 暗黙的または明示的に含まなければなりません。 指定された表またはビューに特殊タイプの列が含まれている場合は、特殊タイプに対する USAGE 特権も必要です。指定した表は、補助表またはクローン表であってはなりません。 指定したビューには、明示的に定義された ROWID 列 (ROWID に基づく特殊タイプを含む)、ID 列、または行変更タイム・スタンプ列を含めないでください。

LIKE を使用すると、n 列を暗黙的に定義したことになります。ここで 、n は、指定した表 (暗黙的な非表示列を含む) またはビュー内の列の数です。 既存の表で暗黙的な非表示列に対応する新規表の列も、暗黙的に非表示と定義されます。 この暗黙的な定義には、以下の場合を除いて、SYSCOLUMNS に記述されている n 列のすべての属性が含まれます。

  • 表が LIKE 文節で指定されており、表内の列にフィールド・プロシージャーがある場合、 新しい表の対応する列には、 同じフィールド・プロシージャーとフィールド記述があります。ただし、フィールド・プロシージャーは、CREATE TABLE ステートメントの 実行中には呼び出されません。ビューを LIKE 文節内で指定した場合、新しい表の列にフィールド・プロシージャーは定義されません。このことは、ビューの基礎となる基本表の列にフィールド・プロシージャーが定義されていた場合でも当てはまります。
  • 表が LIKE 文節で指定されており、表の列が ID 列である場合、新しい表の対応する列 は、ID 列のデータ・タイプだけを継承します。INCLUDING IDENTITY 文節が指定されていない限り、列の IDENTITY 属性は継承されません。
  • 表が LIKE 文節で指定されており、表の列がセキュリティー・ラベル列である場合、新しい表の対応する列は、セキュリティー・ラベル列のデータ・タイプだけを継承します。列のセキュリティー・ラベル属性は継承されません。
  • ROWID 列が含まれている表が LIKE 文節内に指定されている場合、その列が IMPLICITLY HIDDEN 属性を持っているかどうかにかかわらず、新しい表の対応する列はその ROWID 列を継承します。
  • 変更の始まりある表が LIKE 文節の中で指定されており、その表に行変更タイム・スタンプ列、トランザクション開始 ID 列、行開始列、または行終了列が含まれている場合、新しい表の対応する列は、元の列のデータ・タイプのみを継承します。この新しい列は、生成された列とは見なされません。変更の終わり
  • 変更の始まりある表が LIKE 文節の中で指定されており、その表にインライン LOB 列が含まれている場合に、ユニバーサル表スペースにある表であれば、新しい表の対応する列は、インライン属性を継承します。その他の場合、LIKE 文節で識別されている表のインライン属性は無視されます。変更の終わり
  • ビューが LIKE 文節で指定されている場合、新しい表の対応する列に関連するデフォルト値は、 ビューの基礎となる基本表の列によって異なります。基本表の列にデフォルトがない場合には、新しい列にもデフォルトがありません。基本表の列にデフォルトがある場合には、新しい列のデフォルトは、次のようになります。
    • 基礎となる基本表の列で NULL が使用できる場合には、NULL になる。
    • 基礎となる基本表で NULL が使用できない場合には、基礎となる基本表のデータ・タイプのデフォルトになる。
    上記のデフォルトは、基本表列の現行のデフォルトに関係なく選ばれます。INSTEAD OF トリガーが存在していても、デフォルト値の継承には影響しません。
  • 表制御パーティショニングを使用する表が LIKE 文節に指定されている場合、新しい表はその表のパーティション・スキームを継承しません。ADD PARTITION BY RANGE 文節で ALTER TABLE を指定して、これらのパーティション境界を追加することができます。
  • 列の CCSID は、暗黙または明示の CCSID 文節によって決定されます。詳しくは、CCSID 文節を参照してください。
  • 変更の始まり期間を含む表が LIKE 文節に指定されている場合、新しい表は期間を継承しません。変更の終わり
  • 変更の始まりシステム期間テンポラル表が LIKE 文節に指定されている場合、新しい表はシステム期間テンポラル表ではありません。変更の終わり
  • 変更の始まり行アクセス制御または列アクセス制御がアクティブになっている表が LIKE 文節に指定されている場合、新しい表は行アクセス制御または列アクセス制御を継承しません。変更の終わり

暗黙的な定義には、指定した表またはビューのその他の属性は含まれません。 したがって、新しい表に、主キー、外部キーはありません。表は、IN 文節で暗黙的 または明示的に指定した表スペース内に作成され、 また、表がその他のオプションの文節を持つためには、その文節をオプショナルに指定 することが必要です。

copy-options

copy-options
結果表のソースの定義から ID 列属性、行変更タイム・スタンプ属性、および列のデフォルトを継承するかどうかを指定します。
EXCLUDING IDENTITY COLUMN ATTRIBUTES または INCLUDING IDENTITY COLUMN ATTRIBUTES
結果表のソースの定義から ID 列属性を継承するかどうかを指定します。
EXCLUDING IDENTITY COLUMN ATTRIBUTES
結果表のソースの定義から ID 列属性を継承しないように指定します。これはデフォルトです。
INCLUDING IDENTITY COLUMN ATTRIBUTES
可能ならば、ID 列属性 (START WITH、INCREMENT BY、CACHE の値など) をソース表の定義から継承するように指定します。表、ビュー、または fullselect の中で対応する列のエレメントが、IDENTITY 属性をもつ基本表の列名に直接または間接的にマップする表の列名、またはビューの列名である場合に、これらの属性を継承できます。そうでなければ、新しい一時表の列は IDENTITY 属性を継承しません。新しい表の列は、次の場合には IDENTITY 属性を継承しません。
  • fullselect の選択リストに、ID 列名の複数のインスタンス (つまり、同じ列 を複数回選択) が含まれている。
  • fullselect の選択リストに、複数の ID 列が含まれている (つまり、 結合が含まれている)。
  • 選択リストの中の式には、ID 列が含まれています。
  • fullselect に、セット演算が含まれている。
EXCLUDING ROW CHANGE TIMESTAMP COLUMN ATTRIBUTES または INCLUDING ROW CHANGE TIMESTAMP COLUMN ATTRIBUTES
結果表のソースの定義から行変更タイム・スタンプ列属性を継承するかどうかを指定します。
EXCLUDING ROW CHANGE TIMESTAMP COLUMN ATTRIBUTES
ソース結果表の定義から行変更タイム・スタンプ列属性を継承しないことを指定します。これはデフォルトです。
INCLUDING ROW CHANGE TIMESTAMP COLUMN ATTRIBUTES
ソース表の定義から行変更タイム・スタンプ列属性 (使用可能な場合) を継承することを指定します。表、ビュー、または fullselect の中で対応する列のエレメントが、行変更タイム・スタンプ列として定義された基本表の列名に直接または間接的にマップする表の列名、またはビューの列名である場合に、これらの属性を継承できます。それ以外の場合は、新しい一時表の列は行変更タイム・スタンプ列属性を継承しません。 新しい表の列は、次の場合には行変更タイム・スタンプ属性を継承しません。
  • fullselect の選択リストに、行変更タイム・スタンプ列名の複数のインスタンス (つまり、同じ列を複数回選択) が含まれている。
  • fullselect の選択リストに、複数の行変更タイム・スタンプ列名が含まれている (つまり、結合が含まれている)。
  • 選択リストの中の式に、行変更タイム・スタンプ列が含まれている。
  • fullselect に、セット演算 (和集合など) が含まれている。
EXCLUDING COLUMN DEFAULTS、INCLUDING COLUMN DEFAULTS、または USING TYPE DEFAULTS
ソース結果表の定義から列のデフォルトを継承するかどうかを指定します。LIKE 文節を指定する場合、 EXCLUDING COLUMN DEFAULTS、INCLUDING COLUMN DEFAULTS、および USING TYPE DEFAULTS を指定してはいけません。
EXCLUDING COLUMN DEFAULTS
ソース表の定義から列のデフォルトを継承しないように指定します。新しい表の列のデフォルト値は NULL か、デフォルト値が存在しないかのどちらかです。列を NULL にすることができる場合、デフォルトは NULL 値です。その列を NULL にすることができない場合、デフォルト値は 存在せず、新しい表の列に対する挿入操作や更新操作、あるいは LOAD に値が指定されていないとエラーが 発生します。
INCLUDING COLUMN DEFAULTS
ソース表の定義にある更新可能な列ごとに、列のデフォルトを継承するように指定します。列が更新不可の場合、作成される表の対応する列にデフォルトは定義されません。ビューに対して INSTEAD OF トリガー が存在しても、デフォルト値の継承には影響しません。
USING TYPE DEFAULTS
表のデフォルト値が、次に示すように、fullselect から得られる列のデータ・タイプによって決まることを指定します。
データ・タイプ
デフォルト値
数値
0
固定長文字ストリング
ブランク
固定長グラフィック・ストリング
ブランク
固定長バイナリー・ストリング
16 進数のゼロ
可変長ストリング
長さが 0 のストリング
固定長文字または固定長グラフィック
ブランクのストリング
固定長バイナリー
16 進数のゼロ
日付
CURRENT DATE
時刻
CURRENT TIME
変更の始まりTIMESTAMP(integer) WITHOUT TIME ZONE変更の終わり
変更の始まりCURRENT TIMESTAMP(p) WITHOUT TIME ZONE (p は対応するタイム・スタンプ精度)変更の終わり
変更の始まりTIMESTAMP(integer) WITH TIME ZONE変更の終わり
変更の始まりCURRENT TIMESTAMP(p) WITH TIME ZONE (p は対応するタイム・スタンプ精度)。変更の終わり

as-result-table

as-result-table
表の列定義が fullselect の結果に基づくことを指定します。
column-name
表の列の名前を指定します。列名のリストを指定する場合、fullselect の結果表内の列と同じ数の名前で構成されている必要があります。各 column-name は固有で非修飾でなければなりません。列名のリストの指定がない場合、表の列は、fullselect の結果表の列名を継承します。

fullselect の結果表に重複する列名または無名列がある場合は、列名のリストを指定する必要があります。無名列は、AS 文節を使用して名前を指定しない定数、関数、式、またはセット演算から得られた列です。

AS (fullselect)
fullselect の結果から得られた列定義に基づいて表を定義するように指定します。AS (fullselect) を使用すると、n 列の表が暗黙的に定義されます。ここで n は、fullselect から得られる列の数です。新しい表の列は、fullselect から得られる列によって定義されます。それぞれの選択リスト・エレメントに固有の名前が必要です。 SELECT 文節内で AS 文節を使用して、固有の名前を指定できます。

暗黙定義には、fullselect の各結果列の、列名、データ・タイプ、長さ、精度、位取り、および NULL 可能性の特性が含まれます。各列の長さは 0 であってはなりません。他の列属性 (DEFAULT および IDENTITY など) は fullselect から継承されません。fullselect で参照する基本表の暗黙的な非表示列に対応する新規表の列は、その新規表では非表示とは見なされません。生成済みの列属性は fullselect から継承されません。すなわち、表の新しい列は生成される列とは見なされません。 fullselect の対応する選択項目が基本表またはビューの列にマップできる 列である場合、その列に対して FIELDPROC が継承されます。fullselect の中でただ 1 つの表が セキュリティー・ラベル列を含んでいて、かつ、ステートメントの 1 次許可 ID に有効なセキュリティー・ラベルがある場合、新しい表にはセキュリティー・ラベル列が含まれます。

暗黙的な定義には、指定した表またはビューのその他の属性は含まれません。 したがって、新しい表に、主キー、外部キーはありません。表は、IN 文節で暗黙的 または明示的に指定した表スペース内に作成され、 また、表がその他のオプションの文節を持つためには、その文節をオプショナルに指定 することが必要です。

変更の始まりIN ACCELERATOR が指定されている場合、AS (fullselect) は指定できません。変更の終わり

作成される表の所有者が、全選択の中で参照される表またはビューに対する SELECT 特権を保有する必要があります。あるいは、全選択の表を格納しているデータベースに対する SYSADM 権限、または DBADM 権限が特権セットに含まれている必要があります。SELECT 特権を持っているとは、所有者が次のうち少なくとも 1 つの許可を持っていることを意味します。

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

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

全選択では、以下は許可されません。

  • 結果が、ROWID、BLOB、CLOB、DBCLOB、または XML のいずれかのデータ・タイプを持つ列、またはこれらのデータ・タイプに 基づく特殊タイプを持つ列である。
  • 複数のセキュリティー・ラベル列を含む。
  • PREVIOUS VALUE 式または NEXT VALUE 式を含む。
  • ホスト変数を参照するか、またはパラメーター・マーカーを使用します。
  • FROM 文節に SQL データ変更ステートメントを含む。
  • 異なる CCSID セットを使用してエンコードされたデータを参照する最外部の SELECT リストを組み込む。
  • リモート・オブジェクトを参照する。
  • 変更の始まりアクセラレーターのみの表を参照する。変更の終わり
WITH NO DATA
新しい表の属性を定義するためだけに照会を使用するように指定します。fullselect の結果を使用して表にデータが追加されることはなく、REFRESH TABLE ステートメントは使用できません。

変更の始まり指定された表が行アクセス制御または列アクセス制御を使用している場合、新しい表に対しては行アクセス制御および列アクセス制御は定義されません。変更の終わり

materialized-query-definition

materialized-query-definition
マテリアライズ照会表の列定義が fullselect の結果に基づくことを指定します。 materialized-query-table-optionsが指定されている場合、REFRESH TABLE ステートメントを使用して、表に fullselect の結果を追加できます。
column-name
表の列の名前を指定します。列名のリストを指定する場合は、全選択の結果表にある列数と同じ数の名前がリストに含まれている必要があります。それぞれの column-name は、固有名かつ非修飾名であることが必要です。列名のリストの指定がない場合、表の列は、fullselect の結果表の列名を継承します。

fullselect の結果表に重複する列名または無名列がある場合は、列名のリストを指定する必要があります。無名列は、選択リストの AS 文節を使用して名前を指定しない定数、関数、式、またはセット演算から得られた列です。

AS (fullselect)
fullselect の結果から得られた列定義に基づいて表を定義するように指定します。AS (fullselect) を使用すると、n 列の表が暗黙的に定義されます。ここで n は、fullselect から得られる列の数です。新しい表の列は、fullselect から得られる列によって定義されます。それぞれの選択リスト・エレメントに固有の名前が必要です。 SELECT 文節内で AS 文節を使用して、固有の名前を指定できます。

暗黙定義には、fullselect の各結果列の、列名、データ・タイプ、長さ、精度、位取り、および NULL 可能性の特性が含まれます。各列の長さは 0 であってはなりません。他の列属性 (DEFAULT、IDENTITY、およびユニーク制約など) は fullselect から継承されません。fullselect で参照する基本表の暗黙的な非表示列に対応する新規表の列は、その新規表では非表示とは見なされません。生成済みの列属性は fullselect から継承されません。 すなわち、マテリアライズ照会表の新しい列は生成される列とは見なされません。 fullselect の対応する選択項目が、fullselect の FROM 文節内の基本表またはビューの列に直接マップできる列である場合、その列に対して FIELDPROC が継承されます。 fullselect の中でただ 1 つの表が セキュリティー・ラベル列を含んでいて、かつ、ステートメントの 1 次許可 ID に有効なセキュリティー・ラベルがある場合、 マテリアライズ照会表にはセキュリティー・ラベル列が含まれます。

マテリアライズ照会表の作成の許可:
作成される表の所有者が、全選択の中で参照される表またはビューに対する SELECT 特権を保有する必要があります。あるいは、全選択の表を格納しているデータベースに対する SYSADM 権限、または DBADM 権限が特権セットに含まれている必要があります。SELECT 特権を持っているとは、所有者が次のうち少なくとも 1 つの許可を持っていることを意味します。
  • 全選択の中で参照される表またはビューの所有権
  • 全選択の中で参照される表またはビューに対する SELECT 特権
  • SYSADM 権限
  • 全選択の表を格納しているデータベースに対する DBADM 権限

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

全選択に使用される列の修飾子を設定するための規則は、table-name の修飾子を設定するために使用される規則と同じです。

マテリアライズ照会表の作成時に適用される制約事項を以下に示します。fullselect がこれらの制約事項を満たしていない場合は、エラーが発生します。

一般的な制約事項: 次の制限が適用されます。
  • 全選択の各結果列の長さは 0 であってはなりません。
  • 全選択に LOB や XML データ・タイプの列を含めることはできません。
  • セキュリティー・ラベル列を含めることができるのは、全選択の 1 つの表のみです。
  • 全選択に期間指定が含まれていてはなりません。
  • 変更の始まり最外部 SELECT リストは、異なる CCSID セットを使用してエンコードされたデータを参照してはなりません。変更の終わり
  • 全選択の FROM 文節に指定されたオブジェクトを、長さ 0 の列を持つビューにすることはできません。
  • 変更の始まり全選択には、作成されたグローバル一時表、宣言済みグローバル一時表、アクセラレーターのみの表、ディレクトリー表、別のマテリアライズ照会表への参照を含めることはできません。変更の終わり
  • 変更の始まりIN ACCELERATOR が指定されている場合、materialized-query-definition は指定できません。変更の終わり
  • 全選択では、行アクセス制御または列アクセス制御が活動化されている基本表、または行の許可あるいは列マスクが定義されている基本表を直接的または間接的に参照できません。
  • 全選択はホスト変数を参照できず、またパラメーター・マーカーは使用できません。
ENABLE QUERY OPTIMIZATION が有効な場合の追加の制約事項:
  • 全選択は副選択であることが必要です。
  • 副選択に以下を含めることはできません。
    • 特殊レジスター
    • スカラー全選択
    • 行変更タイム・スタンプ列
    • ROW CHANGE 式
    • 暗黙のタイム・ゾーン値が適用される式 (タイム・スタンプからタイム・ゾーン付きタイム・スタンプへのキャストなど)
    • RAND 組み込み関数
    • RID 組み込み関数
    • 非 deterministic であるか、または外部アクションが含まれている、ユーザー定義スカラー関数または表関数
    • 副照会を含む述部
    • 行式述部
    • INNER JOIN 構文を使用した結合、または外部結合
    • 横相関
    • 一時的なマテリアライズを必要とする、ネストされた表の式またはビュー
    • アクティブな行または列のアクセス制御を使用する表、あるいは行または列のアクセス制御が定義された表に対する直接参照または間接参照
    • FETCH FIRST 文節
  • セキュリティー・ラベルの付いた表が参照されている場合は、副選択の外部選択リストでセキュリティー・ラベル列を参照する必要があります。
  • 副選択がビューを参照している場合は、ビュー定義内の全選択がその他の制約事項をすべて満たしている必要があります。
refreshable-table-options
リフレッシュ可能マテリアライズ照会表のオプションを指定します。ORDER BY 文節は許可されますが、REFRESH によってのみ使用されます。ORDER BY 文節を使用すると、マテリアライズ照会表にあるデータを参照する場合の局所性が向上する可能性があります。
DATA INITIALLY DEFERRED
作成時にマテリアライズ照会表にデータを挿入しないように指定します。REFRESH TABLE ステートメントを使用してマテリアライズ照会表にデータを追加するか、INSERT ステートメントを使用してユーザー管理のマテリアライズ照会表にデータを挿入します。
REFRESH DEFERRED
REFRESH TABLE ステートメントを使用して、表のデータをいつでもリフレッシュできるように指定します。照会結果が表のデータに反映される時期は、REFRESH TABLE ステートメントが処理される時点にスナップショットとして、またはユーザー管理のマテリアライズ照会表の最終更新時に限られます。
MAINTAINED BY SYSTEM または MAINTAINED BY USER
マテリアライズ照会表のデータを保守する方法を指定します。
MAINTAINED BY SYSTEM
マテリアライズ照会表をシステムが保守するように指定します。REFRESH ステートメントのみをこの表に対して実行できます。これはデフォルトです。
MAINTAINED BY USER
マテリアライズ照会表をユーザーが保守するように指定します。このユーザーは、LOAD ユーティリティー、SQL データ変更ステートメント、データ変更ステートメントからの SELECT、あるいは REFRESH TABLE SQL ステートメントを表に対して使用できます。
ENABLE QUERY OPTIMIZATION または DISABLE QUERY OPTIMIZATION
最適化のためにこのマテリアライズ照会表を使用できることを指定します。
ENABLE QUERY OPTIMIZATION
照会を最適化するためにマテリアライズ照会表を使用できることを指定します。指定された全選択が照会の最適化に関する制約事項を満たさない場合は、エラーが発生します。

ENABLE QUERY OPTIMIZATION がデフォルトです。

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

DISABLE QUERY OPTIMIZATION
照会を最適化するためにマテリアライズ照会表を使用できないことを指定します。それでも、表を直接照会することはできます。

IN

IN database-name.table-space-name or IN DATABASE database-name
表が作成されるデータベースおよび表スペースを指定します。この形式は両方ともオプションです。

データベースと表スペースの両方を指定する場合、データベースが現在のサーバーのカタログに記述されていなければなりません。 データベースは DSNDB06 または作業ファイル・データベースにしてはなりません。この表スペースはユーザーが指定するデータベースに入っている必要があり、XML 表スペースであってはなりません。

表スペースは指定せずにデータベースを指定する場合は、表スペースは database-name 内に暗黙的に作成されます。表スペースの名前は、表の名前から得られます。この表スペースの修飾子は、その表の修飾子と同じです。 使用されるバッファー・プールは、DSNTIP1 インストール・パネルで指定されたユーザー・データ用のデフォルト・バッファー・プールです。 データベースは指定せずに表スペースを指定する場合は、その表スペースが入っているデータベースが使用されます。

表スペースとデータベースのいずれも無指定の場合は、データベースは DSNxxxxx という名前で暗黙的に作成されます。ここで、xxxxx は 5 桁の数値です。表スペースも暗黙的に作成されます。

表スペースを指定する場合、以下の表スペースのいずれかにすることはできません。

  • 暗黙的に作成された表スペース。
  • パーティション、または既に表が含まれている増加対応パーティション表スペース
  • LOB 表スペース
  • 変更の始まり既にシステム期間テンポラル表または履歴表を含む表スペース。変更の終わり

パーティション化された表スペースを指定する場合には、表のパーティション化スキームが作成されるまで、その表をロードまたは使用することはできません。

暗黙的に作成されたデータベースの名前を指定することはできません。言い換えれば、指定するのは DSNxxxxx という 8 文字のデータベース名になります。ここで、xxxxx は 5 桁の数値です。

表スペースを暗黙的に作成する場合は、特権セットに、SYSADM 権限、 SYSCTRL 権限、データベースに対する DBADM、DBCTRL、または DBMAINT 権限、 あるいは、データベースに対する CREATETS 特権が含まれていなければなりません。さらに、データベースのデフォルト・バッファー・プールおよびデフォルト・ストレージ・グループ に対する USE 特権も持っていなければなりません。

表スペースが暗黙的に作成される場合、DB2 は、暗黙的に定義された表スペースで説明されているようにバッファー・プールを選択します。

変更の始まりIN ACCELERATOR accelerator-name 変更の終わり
変更の始まり表がアクセラレーターのみの表であることを指定します。accelerator-name は、表が定義されるアクセラレーターを指定します。

accelerator-name には別名 (論理名) を指定できます。 詳細は、アクセラレーターでの別名の使用を参照してください。

アクセラレーターのみの表を指定する場合、表と表のデータは、DB2 ではなく、アクセラレーターにのみ存在します。ただし、アクセラレーターのみの表の表と列定義は、DB2 カタログ表に含まれています。

変更の終わり

partitioning-clause block

PARTITION BY RANGE または PARTITION BY SIZE
表のパーティション・スキームを指定します。
PARTITION BY RANGE
表の範囲の パーティション・スキームを指定します (データをパーティション化するために使用される列)。この文節を指定すると、表スペースは完全なものになり、表にパーティション化索引を作成する必要はなくなります。この文節を使用すると、この表に対する後続の CREATE INDEX ステートメントに ENDING AT 文節を使用できなくなります。

変更の始まりこの文節を指定する場合は、IN database-name.table-space-name 文節が必要です。この文節は、パーティション化表スペース内の表のみに適用されます。 増加対応表スペースに作成される表に対して、PARTITION BY RANGE を指定してはいけません。IN ACCELERATOR が指定されている場合、PARTITION BY RANGE を指定してはなりません。変更の終わり

partition-expression
データのターゲット・データ・パーティションを決定するために範囲を定義する対象のキー・データを指定します。
column-name
キーの列を指定します。各 column-name には、この表の列を指定する必要があります。65 列以上の列を指定しないでください。また、同一列を複数回指定しないでください。列の長さ属性の合計は、255 - n を超えてはなりません (ここで、n は NULL 値を格納できる列の数)。修飾列名を指定しないでください。

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

以下のいずれかとして定義されている列は、column-name に指定しないでください。

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

HASH SPACE を指定しなかった場合、各パーティションでは、organization-clause に指定した HASH SPACE 値が使用されます。

partition-elementHASH SPACE キーワードは、organization-clause も指定する場合のみ指定する必要があります。

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

IN ACCELERATOR が指定されている場合、PARTITION BY SIZE を指定してはなりません。

EVERY integer G
表が integer G バイトごとの増分でパーティション化されることを指定します。変更の始まりinteger は、256 を超えてはなりません。変更の終わり IN 文節で表スペースを指定する場合 、integer は、表が入る表スペースに対して有効な DSSIZE 値と同じでなければなりません。

organization-clause

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

PARTITION BY RANGE が指定され、IN 文節によって表スペースを指定する場合、表スペースは、範囲パーティション・ユニバーサル表スペースである必要があり、PAGENUM RELATIVE が指定された表スペースにすることはできません。

PARTITION BY RANGE を指定しない場合で、IN 文節を指定する場合、IN 文節では、増加対応パーティション・ユニバーサル表スペースを識別する必要があります。

APPEND YES を指定して表を定義する場合は、ORGANIZE BY HASH を指定しないでください。

変更の始まり表が基本行形式を使用している場合は、ORGANIZE BY HASH を指定してはなりません。変更の終わり

変更の始まりIN ACCELERATOR が指定されている場合、ORGANIZE BY HASH を指定してはなりません。変更の終わり

変更の始まり
UNIQUE
DB2 がハッシュ・キー列の固有性を強制し、同じ値のハッシュ・キーがある 2 つ以上の行が表に含まれないように指定します。
変更の始まり(column-name,...)変更の終わり
列名のリストによって、行の配置先を決定するために使用されるハッシュ・キーが定義されます。 この column-name は、表の列を識別する非修飾 名でなければなりません。同じ列を複数回指定してはなりません。指定する列は NOT NULL として定義する必要があります。指定する列の数は 64 を超えてはいけません。また、その長さ属性の合計が、 255 を超えてはいけません。指定する列は、以下のタイプのいずれであってもなりません。
  • LOB 列
  • DECFLOAT 列
  • XML 列
  • 前述のいずれかのデータ・タイプに基づく特殊タイプ列

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

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

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

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

その他のオプション

EDITPROC program-name
表の編集プロシージャーをインプリメントするユーザー作成コードを指定します。編集プロシージャーは、現行サーバーに存在していなければなりません。プロシージャーは、表に対する SQL データ変更ステートメントまたは LOAD、およびすべての行検索操作の実行時に呼び出されます。

編集ルーチンは、表の行全体を受け取り、その行をどのような 形にでも変形できます。また、編集ルーチンは、変形された行を受け取り、その行を元の 形に戻さなければなりません。

LOB 列のある表には、編集ルーチンを指定できません。

EDITPROC 出口ルーチンの作成については、編集プロシージャーを参照してください。

WITH ROW ATTRIBUTES
編集プロシージャー・パラメーター・リストに行記述のアドレスが含まれるよう指定します。ID 列、LOB 列、XML 列、ROWID 列、または SECURITY LABEL 列のある表には、WITH ROW ATTRIBUTES を指定しないでください。 WITH ROW ATTRIBUTES がデフォルトです。WITH ROW ATTRIBUTES を指定する場合、表の列名の長さが 18 EBCDIC SBCS 文字を超えてはなりません。
WITHOUT ROW ATTRIBUTES
行の説明が編集プロシージャーに提供されないことを指定します。この編集プロシージャーへのエントリーで、パラメーター・リスト内の行記述のアドレスにゼロの値が含まれます。
VALIDPROC program-name
表についての検証出口ルーチンとして、program-name を指定します。検証出口ルーチンの作成については、 「検証ルーチン」に説明されています。

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

1 つの表がある一時点で持てる検証プロシージャーは、1 つだけです。ALTER TABLE ステートメントでは、置換プロシージャーを指定することや検証プロシージャーの使用を停止することができます。

VALIDPROC を省略した場合、表に検証ルーチンは備わりません。

AUDIT
この表に対するアクセスのタイプのうち、監査を行うようにするタイプを指定します。監査トレース・クラスについては、 「DB2 管理ガイド」を参照してください。

REFRESH TABLE ステートメントを使用してマテリアライズ照会表をリフレッシュする場合は、REFRESH TABLE の操作中にも監査が行われます。 ユーザー管理のマテリアライズ照会表に対して LOAD および SQL データ変更操作を行う場合、AUDIT は通常どおり動作します。

NONE
この表がアクセスされたときに監査を行わないように指定します。 これはデフォルトです。
CHANGES
最初の挿入、更新、または削除操作の間に表がアクセスされたときに、監査を行うように指定します。 ただし、監査が行われるのは、適切な監査トレース・クラスがアクティブな場合だけです。
ALL
ユーティリティーまたはアプリケーション・プロセスによって実行される任意の種類の最初の操作中に表がアクセスさ れたときに、監査を行うように指定します。変更の始まりただし、監査が行われるのは、適切な監査トレース・クラスがアクティブであり、COPY、RECOVER、REPAIR、ダミー入力データ・セットを使用した LOAD、または任意の独立型ユーティリティーによるアクセスでない場合のみです。変更の終わり

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

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

変更の始まりIN ACCELERATOR が指定されている場合、AUDIT NONE、CHANGES、および ALL を指定してはなりません。変更の終わり

OBID integer
変更の始まりこの表に使用する OBID を指定します。OBID は、 オブジェクトの内部記述子の ID です。integer は 1 より大きくなければならず、データベースの既存の OBID または 以前に使用された OBID を示すものであってはなりません。OBID を省略すると 、DB2 が値を生成します。
次のステートメントは、OBID の値を取り出すものです。
  SELECT OBID
    FROM SYSIBM.SYSTABLES
    WHERE CREATOR = 'ccc' AND NAME = 'nnn';

ここで、nnn は表名、ccc は表の作成者です。

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

REFRESH TABLE ステートメントを使用してマテリアライズ照会表をリフレッシュする場合は、REFRESH TABLE の操作中に追加情報のロギングが行われます。ユーザー管理のマテリアライズ照会表に対して挿入、更新、および削除操作を行う場合、DATA CAPTURE は通常どおり動作します。

変更の始まりアクセラレーターのみの表だけに保管されているデータが入った表は、この属性では定義できません。変更の終わり

NONE
追加情報をログに記録しません。これはデフォルトです。
CHANGES
SQL の更新に関する追加データをログに書き込みます。すべての LOB または XML 列によって表される値に関する情報は利用できません。NOT LOGGED を指定する表スペース内にある表に対して、DATA CAPTURE CHANGES を指定しないでください。
WITH RESTRICT ON DROP
表は REPAIR DBD DROP によってのみ消去できることを表しま す。また、その表を含むデータベースおよび表スペースも REPAIR DBD DROP によっての み消去できることを表します。

WITH RESTRICT ON DROP 文節は、DROP RESTRICT ON DROP 文節を指定した ALTER TABLE ステートメントを使用して削除できます。 表の定義から WITH RESTRICT ON DROP 文節を削除した後で、表、データベース、およびそれを含む表スペースを DROP ステートメントを使用してドロップできます。

CCSID encoding-scheme
表に保管されるストリング・データのコード化スキームを指定します。 ある表スペースと共に IN 文節を指定する場合、その値は、指定された表スペースで既に使用されている コード化スキームと一致する必要があります。 SBCS データ、混合データ、およびグラフィック・データの具体的な CCSID は 、IN 文節で指定されている表スペースまたはデータベースによって決まります。IN 文節が無指定の場合、指定された値は、 作成される表および DB2 が暗黙的に作成する 表スペースに使用されます。SBCS データ、混合データ、およびグラフィック・データの具体的な CCSID は、指定されているコード化スキームのサーバーに対するデフォルト CCSID によって決まります。有効な値は ASCII、EBCDIC、 および UNICODE です。

変更の始まりIN ACCELERATOR が指定されている場合、列を ASCII 混合としてもグラフィックとしても定義することはできません。「IBM DB2 Analytics Accelerator for z/OS: Stored Procedures Reference」に、アクセラレーターで許可されているコード化スキームの詳細な説明が記載されています。変更の終わり

CCSID 文節が指定されていない場合、表のコード化スキームは IN 文節によって異なります。

  • IN 文節が指定されている場合、IN 文節で指定されている表スペースまたはデータベースに既に 使用されているコード化スキームが使用されます。
  • IN 文節が指定されていない場合、新しい表のコード化スキームは、 LIKE 文節で指定されている表のスキームになります。

マテリアライズ照会表に対して CCSID 文節を指定する場合、この文節に指定するコード化スキームは、全選択結果の CCSID のスキームと同じであることが必要です。また、この CCSID は作成する表の表スペースの CCSID とも同じであることが必要です。

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

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

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

変更の終わり
NOT VOLATILE
この表に対する SQL アクセスを現行統計に基づいて行うように指定します。NOT VOLATILE がデフォルトです。
CARDINALITY
オプションのキーワードで、現在は効果がありませんが 、DB2 ファミリーの互換性を保つために提供されています。
変更の始まりLOGGED または NOT LOGGED変更の終わり
変更の始まり暗黙的に作成された表スペース内のデータに対する変更をログに記録するかどうかを指定します。このパラメーターは、暗黙的に作成された表スペースおよびその表のすべての索引に適用されます。XML 表スペースとそれに関連付けられた索引は、関連する基本表スペースからロギング属性を継承します。補助索引は、関連する基本表スペースからロギング属性も継承します。

変更の始まりIN table-space-name 文節を使用して表スペース名が指定されている場合、または IN ACCELERATOR 文節が指定されている場合、LOGGEDNOT LOGGED も指定しないでください。変更の終わり

LOGGED
暗黙的に作成された表スペース内のデータに対する変更をログに記録するよう指定します。

LOGGED がデフォルトです。

NOT LOGGED
暗黙的に作成された表スペース内のデータに対する変更をログに記録しないことを指定します。

NOT LOGGED により、取り消しや再実行の情報がログに記録されなくなります。ただし、暗黙的に作成された表スペースの制御情報は引き続きログに記録されます。

変更の終わり
変更の始まりCOMPRESS YES または COMPRESS NO変更の終わり
変更の始まりデータ圧縮が暗黙的に作成された表スペースの行に適用されるかどうかを指定します。デフォルトは、サブシステム・パラメーター USE DATA COMPRESSION の値で指定されます。

変更の始まりIN table-space-name 文節または IN ACCELERATOR 文節が指定されている場合、COMPRESS YESCOMPRESS NO も指定してはなりません。変更の終わり

COMPRESS YES
データ圧縮が暗黙的に作成された表スペースの行に適用されるよう指定します。暗黙的に作成された表スペースの表に LOAD ユーティリティーまた は REORG ユーティリティーを実行しない限り、行の圧縮は行われません。
COMPRESS NO
データ圧縮が暗黙的に作成された表スペースの行に使用されないよう指定します。
変更の終わり
APPEND NO または APPEND YES
表に対する追加処理を使用するかどうかを指定します。作業ファイルの表スペースに 作成される表に対しては、APPEND 文節を指定しないでください。
NO
表に対する追加処理を使用しないことを指定します。挿入操作および LOAD 操作の場合 、DB2 は、行のクラスター・キー列にある値に関してクラスター化された方法でデータ行を入れようとします。

NO がデフォルトです。

YES
データ行を、挿入操作および LOAD 操作の過程でクラスター化を無視して表に入れることを指定します。
変更の始まりDSSIZE integer G変更の終わり
変更の始まり暗黙的に作成された増加対応パーティション表スペースまたは範囲パーティション化ユニバーサル表スペースの最大サイズを指定します。この値は、関連する暗黙的に作成された XML または LOB 表スペースではなく、暗黙的に作成された基本表スペースにのみ適用されます。

次のいずれかの条件が当てはまる場合、DSSIZE integer G を指定しないでください。

  • IN table-space-name 文節を使用して表スペース名が指定されている場合。
  • PARTITION BY 文節に EVERY integer-constant G 文節が含まれている場合。
  • 変更の始まりステートメントにアクセラレーターのみの表が含まれている場合。変更の終わり

デフォルトは、サブシステム・パラメーター MAXIMUM PARTITION SIZE の値で指定されます。

DSSIZE 文節の詳細については、CREATE TABLESPACEを参照してください

変更の終わり
変更の始まりBUFFERPOOL bpname変更の終わり
変更の始まり暗黙的に作成された表スペースに使用するバッファー・プールを指定し、表スペース のページ・サイズを決定します。ページ・バッファー・プール が 4KB、8KB、16KB および 32KB の場合、ページ・サイズは それぞれ 4 KB、8 KB、16 KB、および 32 KB になります。

bpname はアクティブにされたバッファー・プールを示すものでなければなりません。特権セットには、SYSADM 権限、SYSCTRL 権限、またはバッファー・プールに対する USE 特権が含まれていなければなりません。

変更の始まりIN table-space-name 文節を使用して表スペース名が指定されている場合、または IN ACCELERATOR 文節が指定されている場合、BUFFERPOOL bpname を指定しないでください。変更の終わり

BUFFERPOOL 文節を指定しないと、DB2 は、暗黙的に定義された表スペースで説明されているようにバッファー・プールを選択します。

bpname の詳細については、命名規則を参照してください。

変更の終わり
変更の始まりMEMBER CLUSTER変更の終わり
変更の始まり挿入操作により挿入されたデータが、暗黙的なクラスター索引 (最初の索引) または明示的なクラスター索引でクラスター化されないことを指定します。 DB2 は、使用可能スペースに基づいて、暗黙的に作成された表スペースのデータを配置します。

変更の始まりIN table-space-name 文節を使用して表スペース名が指定されている場合、または IN ACCELERATOR 文節が指定されている場合、MEMBER CLUSTER を指定しないでください。変更の終わり

変更の終わり
変更の始まりTRACKMOD YES or TRACKMOD NO変更の終わり
変更の始まりDB2 が暗黙的に作成された表スペースのスペース・マップ・ページ内の変更ページを追跡するかどうかを指定します。 デフォルトは、サブシステム・パラメーター TRACK MODIFIED PAGES の値で指定されます。

変更の始まりIN table-space-name 文節を使用して表スペース名が指定されている場合、または IN ACCELERATOR が指定されている場合、TRACKMOD YESTRACKMOD NO も指定しないでください。変更の終わり

TRACKMOD YES
増分イメージ・コピーのパフォーマンスの改善に役立てるために、 スペース・マップ・ページの変更ページを追跡します。
TRACKMOD NO
スペース・マップ・ページの変更ページを追跡しません。DB2 は、各ページの LRSN 値を使用して、ページが変更されたかどうかを判別します。
変更の終わり

所有者特権:
表の所有者は、すべての表特権 (GRANT (表またはビューの特権) を参照) を持ち、これらの特権を他の人に付与することができます。オブジェクトの所有権について詳しくは 、許可、特権、アクセス権、マスク、およびオブジェクト所有権を参照してください。
表の設計:
表の設計は、データベースの設計処理の一部です。詳しくは 、DB2 データベース設計を参照してください。
セグメント化表スペース内の表の作成:
表は、以下のいずれかの条件に当てはまる場合は、セグメント表スペースに作成することはできません。
  • データ・セット内の利用可能スペースが、表スペースに 指定されているセグメント・サイズよりも小さい。
  • データ・セットを拡張することができない。
グラフィック・データ列または混合データ列がある表の作成:
GRAPHIC 列、VARGRAPHIC 列、または DBCLOB 列、または FOR MIXED DATA として定義された CHAR 列、VARCHAR 列、または CLOB 列がある ASCII または EBCDIC の表は、インストール・オプション MIXED DATA を NO に設定している場合には作成できません。
LOB 列、ROWID 列、および DECFLOAT 列に基づく特殊タイプ列の表の作成:
特殊タイプはそのソース・タイプと同じ制限を受けるので、LOB 列 (CLOB、DBCLOB、および BLOB)、ROWID 列、および DECFLOAT 列に適用される構文規則はすべて、LOB、行 ID、および DECFLOAT に基づく特殊タイプ列に適用されます。 例えば、明示的に定義された ROWID 列と、行 ID に基づく特殊タイプの列を、両方とも表に入れることはできません。
変更の始まりインライン LOB 列内の表:変更の終わり
変更の始まりユニバーサル表スペースにある表が 32K ページ・サイズを超えると、DB2 では、INLINE LENGTH 文節が指定されていない LOB 列のインライン長として 0 を使用しながらレコード・サイズを再計算します。再計算後でも 32K ページ・サイズを超えている場合、CREATE TABLE ステートメントはエラーを返します。

インライン LOB 列を持つ表は、基本行フォーマットを持つ表スペースには作成できません。

変更の終わり
LOB 列がある表の作成:
LOB 列 (CLOB、DBCLOB、または BLOB) がある表には、ROWID 列と 1 つ以上の補助表も必要です。表を作成すると、DB2 はユーザーに代わって暗黙的に ROWID 列を生成します。 この列は暗黙的な非表示 ROWID 列 と呼ばれ 、DB2 は以下のことを行います。
  • DB2_GENERATED_ROWID_FOR_LOBSnn という名前の列を作成する。

    DB2nn を付加するのは、列名が表に既に存在する場合だけであり、これは、nn を 00 で置き換えてから、その行内で固有の名前になるまで 1 ずつ増分します。

  • GENERATED ALWAYS として列を定義する。
  • 他のすべての明示的に定義された列の後で、行の最後に暗黙的な非表示 ROWID 列を追加する。

例えば 、DB2 が表 MYTABLE に対して、DB2_GENERATED_ROWID_FOR_LOBS という名前の暗黙的な非表示 ROWID 列を生成したと想定します。表 MYTABLE に対する SELECT * ステートメントの結果表には、その ROWID 列は含まれません。 ただし、SELECT COL1 の結果表 DB2_GENERATED_ROWID_FOR_LOBS には、暗黙的な非表示 ROWID 列が含まれます。

MIXED DATA サブシステム・パラメーターを yes に設定すると、小文字または大/小文字混合の 16 進定数が LOB 列のデフォルト値として指定され、CREATE TABLE ステートメントからエラーが戻されます。

この表の定義には、非互換のマークが付けられます。この状態は、基本表内の各 LOB 列に対して LOB 表スペースに補助表が作成され、各補助表の索引が作成されるまで続きます。補助表には、LOB 列の実際の値が保管されます。 パーティション化表スペースに LOB 列のある表を作成する場合、 基本表スペースのパーティションごとにそれぞれ 1 個の補助表を定義する必要があります。

DB2 が基本表内の 各 LOB 列に対して LOB 表スペース、補助表、および補助表の索引を暗黙的に作成しない場合、 ユーザーが CREATE TABLESPACE、CREATE AUXILIARY TABLE、および CREATE INDEX ステートメントを使用してこれらのオブジェクトを 作成する必要があります。

表が入る表スペースが明示的に作成され、かつ、CREATE TABLE ステートメントの処理時 に CURRENT RULES 特殊レジスターの値が「STD」である場合、あるいは表が入る表スペースが暗黙的に作成された場合 、DB2 は、基本表内の 各 LOB 列に対して LOB 表スペース、補助表、および補助表の索引を暗黙的に作成します。

特権セットには、以下の特権が含まれていなければいけません。

  • XML オブジェクトが使用する、バッファー・プールおよびストレージ・グループに関する USE 特権
  • 基本表スペースが明示的に作成される場合には、表 (データベースが暗黙的に作成された場合は DSNDB04) を含むデータベースに対して CREATETS も必要です。
DB2 は、 以下の規則を使用して、暗黙的に作成されたオブジェクトの名前を選択します。
LOB 表スペース
8 文字長の名前で、「L」とそれに続く 7 個のランダム文字で構成されます。
補助表
名前は 18 文字長です。名前の最初の 5 文字は、基本表の名前の最初の 5 文字です。次の 5 文字は、LOB 列の名前の最初の 5 文字です。最後の 8 文字は、ランダムに生成されます。基本表名または LOB 列名が 5 文字より短い場合 、DB2 はその名前に下線文字を追加して埋め込み、5 文字の長さにします。
補助表の索引
名前は 18 文字長です。名前の最初の文字は「I」です。次の 10 文字は補助表の名前の最初の 10 文字です。最後の 7 文字は、ランダムに生成されます。索引の属性は COPY NO です。

これらの暗黙的に作成されたオブジェクトのその他の属性は、次に示す例外を除き、 オプショナル文節をすべて省略して、それぞれの CREATE ステートメントで作成した 場合の属性と同じです。

  • データベース名は基本表のデータベース名です。
  • LOB 表スペースが暗黙的に作成された場合、バッファー・プールは、インストール・パネル DSNTIP1 の DEFAULT BUFFER POOL FOR USER LOB DATA フィールドによって決定されます。適切な USE 特権がそのバッファー・プールに対して必要です。

ユーティリティー REPORT TABLESPACESET は 、DB2 が暗黙的に作成された LOB 表スペース を識別します。

XML 列のある表の作成:
XML 列のある表が作成されるとき、XML 表スペース、XML 表、およびノード ID 索引と文書 ID 索引が暗黙的に作成されます。

特権セットには、以下の特権が含まれていなければいけません。

  • XML オブジェクトが使用する、バッファー・プールおよびストレージ・グループに関する USE 特権
  • 基本表スペースが明示的に作成される場合には、表 (データベースが暗黙的に作成された場合は DSNDB04) を含むデータベースに対して CREATETS も必要です。

XML 表スペースのバッファー・プールは、インストール・パネル DSNTIP1 の DEFAULT BUFFER POOL FOR USER XML DATA フィールドによって決定されます。適切な USE 特権がそのバッファー・プールに対して必要です。

基本表スペースが範囲対応でパーティション化されている場合、XML 表スペースは、基本表スペースを超える DSSIZE を保持します。 基本表スペースが増加対応でパーティション化されている場合、デフォルトの DSSIZE (4 GB) が XML 表スペースに使用されます。 範囲対応でパーティション化された基本表スペースに関連する XML 表スペースの DSSIZE は、以下のように判別されます。

表 2. XML 表スペースのデフォルト DSSIZE、所定の基本表スペース DSSIZE およびページ・サイズ
基本表スペース DSSIZE 4 KB 基本ページ・サイズ 8 KB 基本ページ・サイズ 16 KB 基本ページ・サイズ 32 KB 基本ページ・サイズ
1 GB から 4 GB 4GB 4GB 4GB 4GB
8GB 32GB 16GB 16GB 16GB
16GB 64GB 32GB 16GB 16GB
32GB 64GB 64GB 32GB 16GB
64GB 64GB 64GB 64GB 32GB
変更の始まり128GB変更の終わり 変更の始まり256GB変更の終わり 変更の始まり256GB変更の終わり 変更の始まり128GB変更の終わり 変更の始まり64GB変更の終わり
変更の始まり256GB変更の終わり 変更の始まり256GB変更の終わり 変更の始まり256GB変更の終わり 変更の始まり256GB変更の終わり 変更の始まり128GB変更の終わり

例えば、8 GB の DSSIZE および 8 KB のページ・サイズがある基本表スペースでは、XML 表スペースは 16 GB の DSSIZE です。

暗黙的に作成された XML オブジェクトの命名規則:
暗黙的に作成された XML 表スペース名は Xyyynnnn です。ここで、yyy は基本表名の先頭 3 バイトから派生します (名前が 3 文字未満の場合、yyy は X で埋められます)。 nnnn は数値ストリングで 0000 から始まり、名前がユニークになるまで 1 ずつ増分されます。

暗黙的に作成された XML 表の名前は Xyyyyyyyyyyyyyyyyyynnn になります。 ここで、yyyyyyyyyyyyyyyyyy は基本表名の先頭 18 UTF-8 バイト、または、基本表名が 18 文字未満の場合には基本表名全体です。nnn は、名前が既にその表に存在する場合にのみ付加されます。 名前が既に存在する場合は、nnn は 000 に置き換えられ、その名前が ユニークになるまで 1 ずつ増やされます。

暗黙的に作成された文書 ID 索引の名前は I_DOCIDyyyyyyyyyyyyyyyyyynnn になります。 ここで、yyyyyyyyyyyyyyyyyy は基本表名の先頭 18 UTF-8 バイト、または、基本表名が 18 文字未満の場合には基本表名全体です。nnn は、索引が既にその表に存在する場合にのみ付加されます。索引が既に存在する場合は、nnn は 000 に置き換えられ、その名前が ユニークになるまで 1 ずつ増やされます。

暗黙的に作成されたノード ID 索引の名前は I_NODEIDyyyyyyyyyyyyyyyyyynnn になります。 ここで、yyyyyyyyyyyyyyyyyy は XML 表名の先頭 18 UTF-8 バイト、または、表名が 18 文字未満の場合には XML 表名全体です。nnn は、索引が既にその表に存在する場合にのみ付加されます。索引が既に存在する場合は、nnn は 000 に置き換えられ、その名前が ユニークになるまで 1 ずつ増やされます。

ID 列のある表の作成:
表に ID 列がある場合、DB2 は、行が表に挿入される際に、列に対して連続する数値を自動的に生成することができます。したがって、ID 列は、主キーにとっては理想的になります。 ID 列と ROWID 列は、両方とも DB2 が生成する値が含まれているタイプの列であるという点で似ています。 ROWID 列は、ラージ・オブジェクト (LOB) 表スペースで使用され、行に直接アクセスする 際に便利です。ROWID 列には、ROWID データ・タイプの値が含まれます。この ROWID 列には、規則的に昇順または降順になっていない 40 バイトの VARCHAR 値が戻されます。そのため、ROWID データ値は、従業員番号や製品番号を生成するような、多くのアプリケーション による使用には適していません。LOB データではなく、行への直接アクセスが不要なデータの場合には、 通常、ID 列のほうが 適しています。ID 列には、既存の数値データ・タイプが含まれており、ROWID 値が適していない 広範囲の用途に使用できるからです。

表のポイント・イン・タイム・リカバリーを行う場合、ID 列の生成値にかなりのギャップが発生する可能性があります。 例えば、ある表には ID 列がある表を想定します。この ID 列には、増分値が 1 で、時刻 T1 に最後に生成された値が 100 であり 、DB2 が、その後に 1000 までの値を 生成します。ここで、表スペースを時点 T1 までリカバリーします。 リカバリー完了後に挿入される次の行の ID 列の 生成値は 1001 になり、ID 列の値に は 100 から 1001 までのギャップが発生することになります。

ID 列の値が確実に固有値になるようにしたい場合は、列に対してユニーク索引を作成します。

LONG VARCHAR 列または LONG VARGRAPHIC 列がある表の作成:
DB2 の旧リリースとの 互換性を保つために、構文 LONG VARCHAR と LONG VARGRAPHIC が許されていますが、この構文の使用は推奨されません。 VARCHAR(integer) および VARGRAPHIC(integer) が推奨構文です。この理由は、CREATE TABLE ステートメントの処理後 、DB2 は LONG VARCHAR 列を VARCHAR 列と見なし、LONG VARGRAPHIC 列を VARGRAPHIC と見なすからです。

LONG VARCHAR または LONG VARGRAPHIC の構文を使用して列を 定義する場合は、DB2 が列の長さ属性を決定します。次に示す情報を使用して、列のバイト・カウントと文字カウントを計算できます。この情報は、LONG VARCHAR または LONGVARGRAPHIC の構文を使用する必要がある既存アプリケーションのために提供されています。

バイト・カウントを計算するには、次の公式を使用します。
2*(INTEGER((INTEGER((m-i-k)/j))/2))
ここで、
m
最大行サイズ (最大レコード・サイズより 8 だけ少ない数)。
i
表の中の LONG VARCHAR または LONG VARGRAPHIC ではない列すべてのバイト・カウントの合計。
j
表の中の LONG VARCHAR 列および LONG VARGRAPHIC 列の数。
k
NULL にすることのできる LONG VARCHAR 列および LONG VARGRAPHIC 列の数。

文字カウントは、次のようにして求めます。

  1. バイト・カウントを求めます。
  2. 2 を引きます。
  3. データ・タイプが LONG VARGRAPHIC の場合は、その結果を 2 で割りま す。結果が整数でなければ、小数部分を取り除きます。
IN DATABASE 文節を指定する場合:
表スペースは指定せずに IN DATABASE を指定 (明示的に指定するか、デフォルトにより指定) する場合、表スペースは database-name 内に暗黙的に作成されます。表スペースの名前は、表名から得られます。この表スペースの修飾子は、その表の修飾子と同じです。表スペースの所有者は SYSIBM です。

変更の始まり範囲パーティションを指定しないと、暗黙的に作成された表スペースは、MAXPARTITIONS 256、SEGSIZE 32、および DSSIZE 4G の増加対応パーティション表スペースになります。変更の終わり

変更の始まり範囲パーティションを指定すると、表スペースは SEGSIZE 32、LOCKSIZE ROW、および LOCKMAX SYSTEM のデフォルトを指定した CREATE TABLE ステートメントで指定されたパーツの数に基づいてパーティション化されます。変更の終わり

IN 文節を指定しない場合:
IN 文節を指定しないと 、DB2 サブシステムは、前述したように表スペースを暗黙的に作成しますが、さらに、DB2 サブシステムはデータベースも選択します。DB2 サブシステムは、DSNnnnnn という形式の名前を作成します。ここで、nnnnn は 00001 以上、シーケンス SYSIBM.DSNSEQ_IMPLICITDB の最大値 (デフォルトは 10000) 以下です。データベースの所有者は SYSIBM です。
  • DSNnnnnn が暗黙的に作成されたデータベースであり、これが既に存在する場合 、DB2 サブシステムはこのデータベース内に表を作成します。
  • DSNnnnnn が存在しない場合 、DB2 サブシステムは DSNnnnnn という名前でデータベースを作成します。

デッドロック、タイムアウト、またはリソース使用不可などの条件により DSNnnnnn が作成できない場合、DB2 サブシステムは nnnnn を 1 ずつ増加して、その結果できるデータベース名を使用して作成を試行します。DB2 サブシステムが、シーケンス SYSIBM.DSNSEQ_IMPLICITDB の最大値に到達し、対応するデータベース名が使用できない場合は、DB2 サブシステムは nnnnn を 00001 に設定し、その結果生成されるデータベース名を使用して作成を試行します。DB2 サブシステムが、シーケンス SYSIBM.DSNSEQ_IMPLICITDB の最大値に等しい回数の表作成を試行して成功しない場合、エラーが発生します。

変更の始まり暗黙的に作成された表スペース属性:変更の終わり
変更の始まり暗黙的に作成された表スペースの属性は、ALTER TABLESPACE ステートメントを使用して変更できます。変更の終わり
変更の始まりシステム期間テンポラル表の定義:変更の終わり
変更の始まりシステム期間テンポラル表の定義には、以下が含まれます。
  • 行開始列および行終了列を使用して定義される SYSTEM_TIME という名前のシステム期間。
  • トランザクション開始 ID 列。
  • 関連履歴表の名前を含むシステム期間データ・バージョン管理定義。
システム期間テンポラル表がドロップされるときに履歴表が暗黙的にドロップされないようにするために、履歴表の定義で WITH RESTRICT ON DROP 節を使用してください。変更の終わり
変更の始まりアプリケーション期間テンポラル表の定義: 変更の終わり
変更の始まりアプリケーション期間テンポラル表の定義には、BUSINESS_TIME という名前のアプリケーション期間が含まれます。アプリケーション期間は、開始タイム・スタンプ列と終了タイム・スタンプ列を使用して定義します。

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

変更の終わり
変更の始まりバイテンポラル表:変更の終わり
変更の始まりシステム期間データ・バージョン管理に対して定義され、BUSINESS_TIME 期間を含む表は、バイテンポラル表と呼ばれます。変更の終わり
変更の始まりトランザクション開始 ID 列に関する考慮事項:変更の終わり
変更の始まり列が NULL 値を許可する場合、トランザクション開始 ID 列には NULL 値が含まれます。その他のトランザクションに対して生成されるその他の行開始列の値から固有である行開始列は、トランザクション開始 ID 列と共存します。列が 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
変更の終わり
変更の始まりORGANIZE BY HASH を使用して IN 文節を指定する場合:変更の終わり
変更の始まりIN DATABASE (明示的またはデフォルトのいずれか) および ORGANIZE BY HASH を 指定すると、DB2 では、表の定義に基づいてハッシュ編成の最適バッファー・プールを計算し、明示的に作成された表スペースのバッファー・プールを使用して、この計算によるバッファー・プールを検証します。 バッファー・プール・サイズが異なっていると、DB2 はエラーを戻します。

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

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

変更の終わり
変更の始まりORGANIZE BY HASH を使用して IN 文節を指定しない場合:変更の終わり
変更の始まりIN DATABASE (明示的またはデフォルトのいずれか) を指定しないと、DB2 では、範囲パーティション・ユニバーサル表スペースの各パーティションにデフォルトの DSSIZE である 4G を使用するか、パーティション文節に指定されている値を使用します。CREATE TABLE に指定されているハッシュ・スペース値が部分ごとに検証されて、指定された DSSIZE が適切であるかどうかが確認されます。 DSSIZE が適切でない場合は、エラーが返されます。

指定したハッシュ・スペースに必要な最大パーティション数が、許可される最大パーティション数を超える場合、DB2 はエラーを返します。

選択されたバッファー・プールが使用可能でない場合は、エラーが返されます。

変更の終わり
変更の始まりハッシュ編成および LOB 列を使用する表の作成:変更の終わり
変更の始まり表スペースが増加対応パーティション・ユニバーサル表スペースの場合、DB2 では、HASH SPACE に指定された値に応じて、必要な数のパーティションを事前割り振りします。DB2 が新規パーティションに LOB オブジェクトを暗黙で作成する必要がある場合、暗黙で作成される LOB オブジェクトに設定される特権には、LOB 表スペースのバッファー・プールに対する USE 特権が含まれる必要があります。変更の終わり
変更の始まりハッシュ・スペースおよび DB2 ページ・サイズ:変更の終わり
変更の始まり指定したハッシュ・スペースが 64 MB (DB2 のデフォルト) 以下である場合、DB2 では、DB2 システム・ページ用の追加のスペースを追加します。指定したハッシュ・スペースが 64 MB を超える場合、DB2 では、ハッシュ・スペースの一部を DB2 システム・ページ用に使用します。DB2 システム・ページ用に必要なスペースの量は、SEGSIZE と PAGESIZE によって異なります。SEGSIZE や PAGESIZE が大きいほど、DB2 システム・ページの所要量が大きくなります。 DB2 では、最大の SEGSIZE 値 (64) および PAGESIZE 値 (32K) に対応して、5 MB までをシステム・ページ用に予約できます。変更の終わり
変更の始まりハッシュ・スペースおよび DSSIZE:変更の終わり
変更の始まり特定の表スペース特性に応じて、DB2 はハッシュ・オーバーフロー域用のスペースを予約する必要があります。したがって、ハッシュ・スペースの量を DSSIZE 値と同じにすることはできません。指定できるハッシュ・スペースの最大量は、DSSIZE 値より約 20% 少なくなります。ハッシュ・スペースの量が多すぎると、DB2 はエラーを返します。ハッシュ・スペースの量が多すぎる場合、DSSIZE の値を大きくするか、またはハッシュ・スペースの量を減らしてください。変更の終わり
変更の始まりORGANIZE BY HASH と組み合わせた APPEND の指定:変更の終わり
変更の始まり追加処理は、ハッシュ編成を使用する表には適用できません。これは、 ハッシュ編成にはキー・クラスタリングが存在しないためです。ハッシュ編成を使用する表に 対する挿入操作の場合、DB2 では、内部ハッシュ・アルゴリズムを使用して 行の場所を決定します。変更の終わり
変更の始まりハッシュ編成を使用する表に関する制約事項:変更の終わり
変更の始まりハッシュ編成を使用する表は以下の制約事項の対象になります。
  • ハッシュ編成を使用するように定義される表は、LOB 表スペースにも XML 表スペースにも作成できません。
  • MEMBER CLUSTER 文節を指定して表スペースを定義する場合は、ORGANIZE BY HASH を指定しないでください。
  • MAXROWS 文節は、ハッシュ編成を使用する表の表スペースのハッシュ・オーバーフロー域に対してのみ適用できます。各ページの固定ハッシュ域は、保持できる限りの数の行を含み、最大 255 行です。
  • ORGANIZE BY HASH UNIQUE (column-list) 文節は、partition-element に HASH SPACE integer K|M|G を指定する場合に必要です。 organization-clause は表全体に適用され、partition-element 文節はパーティション・レベルで適用されます。
  • DB2 では、ハッシュ編成を使用して表を作成するときに、ハッシュ・オーバーフロー索引を自動作成します。
変更の終わり
暗黙的に作成された表スペース:
表スペースが暗黙的に作成された場合、以下の必要なシステム・オブジェクトもすべて暗黙的に作成されます。
  • 適用する主キー索引
  • 適用するユニーク・キー索引
  • 必要な LOB 表スペース、補助表スペース、および補助索引
  • ROWID 索引 (ROWID 列が GENERATED BY DEFAULT と定義されている場合)

変更の始まりDB2 がインライン LOB を持つ可能性がある LOB 列を持つ表の基本表スペースを暗黙的に作成する場合、DB2 は、RRF サブシステム・パラメーターの値に関係なく、再配列行フォーマットで基本表スペースを作成します。変更の終わり

変更の始まりDB2 がハッシュ編成を持つ表の表スペースを暗黙的に作成する場合、DB2 は、RRF サブシステム・パラメーターの値に関係なく、再配列行フォーマットで基本表スペースを作成します。変更の終わり

暗黙的に作成された索引:
PRIMARY KEY 文節または UNIQUE 文節を CREATE TABLE ステートメントで使用し、かつ、CREATE TABLE ステートメントがスキーマ・プロセッサーで処理される場合、あるいは、表が入る表スペースが暗黙的に作成された場合は、DB2 は使用するユニーク索引を暗黙的に作成し、主キーまたはユニーク・キーが一意となるようにします。

CREATE TABLE ステートメントで ROWID 列が GENERATED BY DEFAULT として定義されていて、かつ、その CREATE TABLE ステートメントが SET CURRENT RULES = 'STD' で処理される場合、あるいは、表が入る表スペースが暗黙的に作成された場合は 、DB2 は 使用するユニーク索引を暗黙的に作成し、ROWID 列が一意になるようにします。

特権セットには、バッファー・プールに対する USE 特権が含まれていなければいけません。

各索引は、次の CREATE INDEX ステートメントが出された かのように作成されます。
CREATE UNIQUE INDEX xxx ON table-name (column1,...)
ここで、
  • xxxDB2 が生成する索引名。
  • table-name は CREATE TABLE ステートメントで 指定された表の名前。
  • (column1,...) は CREATE TABLE ステートメントの UNIQUE 文節または PRIMARY KEY 文節に指定した列名のリストであるか、または、この列は GENERATED BY DEFAULT として定義される ROWID 列です。

スキーマ・プロセッサーについては、 「DB2 管理ガイド」を参照してください。

さらに、表が含まれる表スペースが暗黙的に作成された場合 、DB2 は DEFINE DATA SET サブシステム・パラメーターを調べ、基本表上に暗黙的に作成された索引の索引スペースに対して、基礎となるデータ・セットを定義するかどうかを判断します。

DEFINE DATA SET が NO であれば、以下の CREATE INDEX ステートメントが発行されたかのように、索引が作成されます。
CREATE UNIQUE INDEX xxx ON table-name (column1,...) DEFINE NO
最大レコード・サイズ:
表の最大レコード・サイズは、表 3 で示されているように、表スペースのページ・サイズ、表スペースがハッシュ・アクセス用に編成されるかどうか、および EDITPROC 文節が指定されているかどうかによって決まります。

表スペースの初期ページ・サイズはそのバッファーのサイズです。このサイズは、表スペースの作成時に明示的または暗黙的に指定された BUFFERPOOL 文節によって決まります。レコード・サイズが、この表スペースのページ・サイズに対する最大レコード・サイズ の 90 パーセントに達すると、次に大きなページ・サイズが自動的に使用されます。

変更の始まり
表 3. 最大レコード・サイズ (バイト数)
 
ページ・サイズ
= 4KB
ページ・サイズ
= 8KB
ページ・サイズ
= 16KB
ページ・サイズ
= 32KB
非ハッシュ表 4056 8138 16330 32714
EDITPROC=YES が指定された非ハッシュ表 4046 8128 16320 32704
ハッシュ表 (ハッシュ・ホーム・ページ) 3817 7899 16091 32475
EDITPROC=YES が指定されたハッシュ表 (ハッシュ・ホーム・ページ) 3807 7889 16081 32465
変更の終わり

VARCHAR 列が表の中の唯一の列である場合、最大レコード・サイズは、 その列の最長に対応します。

この表が含まれる表スペースが暗黙的に作成された場合 、適切なバッファー・プール・サイズは実際のレコード・サイズに応じて選択されます。 レコード・サイズが表スペースのページ・サイズに対する最大レコード・サイズの 90 パーセントに達すると、 次に大きなページ・サイズが使用されます。表 4 は、最大レコード・サイズの 90% の値を示しています。
変更の始まり
表 4. 最大レコード・サイズの 90 % (バイト単位)
 
ページ・サイズ
= 4KB
ページ・サイズ
= 8KB
ページ・サイズ
= 16KB
ページ・サイズ
= 32KB
非ハッシュ表 3650 7324 14697 29443
EDITPROC=YES が指定された非ハッシュ表 3641 7315 14688 29434
ハッシュ表 (ハッシュ・ホーム・ページ) 3435 7109 14482 29228
EDITPROC=YES が指定されたハッシュ表 (ハッシュ・ホーム・ページ) 3426 7100 14473 29219
変更の終わり
バイト・カウント:
列のバイト・カウントの合計が、表の最大行サイズを超えてはなりません。最大行サイズは、最大レコード・サイズより 8 だけ小さくなります。

表 5 は、NULL 値を使用できない列の、データ・タイプごとの バイト・カウントを示しています。NULL 値にすることができる列の場合には、バイト・カウントはこの表 に示した値より 1 だけ多くなります。

表 5. データ・タイプごとの列のバイト・カウント
データ・タイプ バイト・カウント
INTEGER 4
SMALLINT 2
BIGINT 8
FLOAT(n) n が 1 から 21 の間の場合、バイト・カウントは 4 です。 n が 22 から 53 の間の場合、バイト・カウントは 8 です。
DECIMAL INTEGER(p /2)+1。p は精度です。
DECFLOAT(16) 9
DECFLOAT(34) 17
CHAR(n) n
VARCHAR(n) n+2
CLOB 6
変更の始まりインライン CLOB変更の終わり 変更の始まり6 + インライン・バイト数変更の終わり
GRAPHIC(n) 2n
VARGRAPHIC(n) 2n+2
DBCLOB 6
変更の始まりインライン DBCLOB変更の終わり 変更の始まり6 + (インライン文字数 * 2)変更の終わり
BINARY(n) n
VARBINARY(n) n+2
BLOB 6
変更の始まりインライン BLOB変更の終わり 変更の始まり6 + インライン・バイト数変更の終わり
DATE 4
TIME 3
変更の始まりTIMESTAMP(p) WITHOUT TIME ZONE変更の終わり 変更の始まりINTEGER((p+1)/2) + 7 (p は精度)変更の終わり
変更の始まりTIMESTAMP(p) WITH TIME ZONE変更の終わり 変更の始まりINTEGER((p+1)/2) + 9 (p は精度)変更の終わり
ROWID 19
特殊タイプ 特殊タイプの基となったソース・データ・タイプの長さ
XML

変更の始まり6 - 列が XML 文書の複数バージョンを格納することができない場合。変更の終わり

変更の始まり14 - 列が XML 文書の複数バージョンを格納することができる場合。変更の終わり

関連情報: 変更の始まり 変更の終わり
マテリアライズ照会表の作成:
CREATE TABLE ステートメントの全選択に SELECT * が含まれている場合、副選択の選択リストはマテリアライズ照会表の作成時点で決定されます。また、ユーザー定義関数の参照も同時に解決されます。CREATE TABLE ステートメントの実行時点での分離レベルが、マテリアライズ照会表の分離レベルです。マテリアライズ照会表の作成後、SYSIBM.SYSVIEWS カタログ表にあるその表の行の REFRESH_TIME 列には、デフォルトのタイム・スタンプが格納されます。

マテリアライズ照会表の所有者には、表に対する GRANT オプションを含むすべての表特権があります。このことは、基本表、ビュー、関数、およびシーケンスに対して必要な特権を所有者が持っているかどうかに関係ありません。

マテリアライズ照会表に対して、ユニーク制約、またはユニーク索引を作成することはできません。このため、マテリアライズ照会表を参照制約の親表にすることはできません。

ユーザー管理のマテリアライズ照会表を作成する場合は、照会最適化を使用不可に設定してマテリアライズ照会表を作成し、表にデータを追加した後で、表の照会最適化を使用可能に設定する必要があります。こうしなければ 、DB2 は空のマテリアライズ照会表を使用して 照会を書き換える可能性があり、正確な結果が得られません。

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

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

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

フィールド・プロシージャー、編集プロシージャー、および妥当性検査出口プロシージャーに関する制約事項:
フィールド・プロシージャー、編集プロシージャー、および妥当性検査出口プロシージャーは、18 バイト (EBCDIC) よりも長い列名が付いた表では使用できません。フィールド・プロシージャーまたは妥当性検査出口プロシージャーを保有する表が存在し、かつ、その列名が 18 バイトよりも長い列を追加すると、その表に対するフィールド・プロシージャーと妥当性検査出口プロシージャーは無効化されることになります。

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

変更の始まりCREATE TABLE と同じ作業単位内の特定の SQL ステートメントに関する制約事項:変更の終わり
変更の始まり
  • 同じ作業単位の中で、PARTITION BY 文節を含む CREATE TABLE ステートメントの後に、データを変更する SQL ステートメントを続けてはなりません。
  • IN ACCELERATOR 文節を含む CREATE TABLE ステートメントは、他の SQL ステートメントとは別の作業単位で発行してください。
変更の終わり
ユーティリティーの実行中の表の作成:
DB2 ユーティリティーが IN 文節によって暗黙的または明示的に指定された表スペースの制御権を持っている間は、CREATE TABLE を使用できません。
変更の始まり定義に対する保留中の変更がある場合の表スペースに関する制約事項:変更の終わり
変更の始まり表スペースの定義に対する保留中の変更がある場合は、CREATE TABLE ステートメントは許可されません。変更の終わり
代替構文およびシノニム:
DB2 の前のリリースや DB2 ファミリーのその他の製品との互換性を保つために、DB2 では以下の文節がサポートされます。
  • NO CACHE のシノニムとして NOCACHE (単一文節)
  • NO CYCLE のシノニムとして NOCYCLE (単一文節)
  • NO MINVALUE のシノニムとして NOMINVALUE (単一文節)
  • NO MAXVALUE のシノニムとして NOMAXVALUE (単一文節)
  • NO ORDER のシノニムとして NOORDER (単一文節)
  • PART integer VALUES は、PARTITION integer ENDING AT の代替として指定できます。
  • ENDING AT のシノニムとして VALUES
  • WITH NO DATA のシノニムとして DEFINITION ONLY
  • CREATE と TABLE の間の SUMMARY
  • 変更の始まりTIMEZONE は、 TIME ZONE の代替として指定できます。変更の終わり

例 1: データベース DSN8D10A の表スペース DSN8S10DDSN8A10.DEPT という 名前の表を作成します。5 つの列に DEPTNO、DEPTNAME、MGRNO、 ADMRDEPT、および LOCATION と名前を付け、NULL を格納できるのは MGRNO と LOCATION のみとします。また、DEPTNO を主キーの唯一の列として指定します。5 つの列すべてに、文字ストリング・データが入ります。インストール・ パネル DSNTIPF のフィールド MIXED DATA の値が NO であるとすると、5 つの列のサブタイプはすべて SBCS となります。
   CREATE TABLE DSN8A10.DEPT
     (DEPTNO   CHAR(3)     NOT NULL,
      DEPTNAME VARCHAR(36) NOT NULL,
      MGRNO    CHAR(6)             ,
      ADMRDEPT CHAR(3)     NOT NULL,
      LOCATION CHAR(16)            ,
      PRIMARY KEY(DEPTNO)          )
     IN DSN8D10A.DSN8S10D;
例 2: データベース DSN8D10A の 暗黙的に作成された表スペースに DSN8A10.PROJ という名前の表を作成します。DSN8EAPR という検証プロシージャーを、その表に割り当てます。
   CREATE TABLE DSN8A10.PROJ
     (PROJNO   CHAR(6)      NOT NULL,
      PROJNAME VARCHAR(24)  NOT NULL,
      DEPTNO   CHAR(3)      NOT NULL,
      RESPEMP  CHAR(6)      NOT NULL,
      PRSTAFF  DECIMAL(5,2)         ,
      PRSTDATE DATE                 ,
      PRENDATE DATE                 ,
      MAJPROJ  CHAR(6)      NOT NULL)
     IN DATABASE DSN8D10A
     VALIDPROC DSN8EAPR;
例 3: 表 PROJECT は 列 DEPTNO と RESPEMP (あるプロジェクトに 責任を持つ部門番号と従業員) で構成される非基本ユニーク・キーを持つとします。そのユニーク・キーについての外部キーを指定して、 ACTIVITY という名前のプロジェクト活動表を作成します。
   CREATE TABLE ACTIVITY
     (PROJNO   CHAR(6)      NOT NULL,
      ACTNO    SMALLINT     NOT NULL,
      ACTDEPT  CHAR(3)      NOT NULL,
      ACTOWNER CHAR(6)      NOT NULL,
      ACSTAFF  DECIMAL(5,2)         ,
      ACSTDATE DATE         NOT NULL,
      ACENDATE DATE                 ,
      FOREIGN KEY (ACTDEPT,ACTOWNER)
         REFERENCES PROJECT (DEPTNO,RESPEMP) ON DELETE RESTRICT)
     IN DSN8D10A.DSN8S10D;
例 4: サンプル従業員表を補完する従業員の写真と履歴書 の表 EMP_PHOTO_RESUME を作成します。この表には、各従業員の写真と 履歴書が含まれます。この表を表スペース DSN8D10A.DSN8S10E に書き込みます。DB2 に常に ROWID 列の値を生成させます。
   CREATE TABLE DSN8A10.EMP_PHOTO_RESUME
     (EMPNO      CHAR(6)     NOT NULL,
      EMP_ROWID  ROWID NOT NULL GENERATED ALWAYS,
      EMP_PHOTO  BLOB(110K),
      RESUME     CLOB(5K),
      PRIMARY KEY (EMPNO))
     IN DSN8D10A.DSN8S10E
     CCSID EBCDIC;
例 5: EMPNO という名前の ID 列がある EMPLOYEE 表を作成します。 DB2 が常に列の値を生成するように、ID 列を定義します。割り当てられる最初の値、および順に生成される連続した数値間の増分差に、デフォルト値 1 を使用します。
   CREATE TABLE EMPLOYEE
     (EMPNO      INTEGER GENERATED ALWAYS AS IDENTITY,
      ID         SMALLINT,
      NAME       CHAR(30),
      SALARY     DECIMAL(5,2),
      DEPTNO     SMALLINT)
     IN DSN8D10A.DSN8S10D;
例 6: TRANS という名前の非常に大きな取引表に、その会社によって処理される取引ごとに 1 つずつ行があるとします。この表には多数の列が定義されています。TRANS 表に対して、その日の日次サマリー・データと取引額を含むマテリアライズ照会表を作成します。
   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;
     
例 7: 以下の例では、増加対応パーティション表スペースに表を作成し、APPEND オプションを組み込みます。
  CREATE TABLE TS01TB
       (C1 SMALLINT,
        C2 DECIMAL(9,2),
        C3 CHAR(4))
    APPEND YES
    IN TS01DB.TS01TS;
例 8: 以下の例では、増加対応パーティション表スペースに表を作成します。ここでは、表スペースは暗黙的に作成されます。
  CREATE TABLE TS02TB
       (C1 SMALLINT,
        C2 DECIMAL(9,2),
        C3 CHAR(4))
     PARTITION BY SIZE EVERY 4G
     IN DATABASE DSNDB04;
例 9: 表 EMP_INFO を作成します。この表には各従業員の電話番号とアドレスが含まれています。表には行変更タイム・スタンプ列を組み込み、従業員情報の変更を追跡できるようにします。
  CREATE TABLE EMP_INFO
       (EMPNO CHAR(6) NOT NULL,
        EMP_INFOCHANGE NOT NULL
           GENERATED ALWAYS FOR EACH ROW ON UPDATE
           AS ROW CHANGE TIMESTAMP,
        EMP_ADDRESS VARCHAR(300),
        EMP_PHONENO CHAR(4),
        PRIMARY KEY (EMPNO));
例 10: 範囲パーティション・スキームを使用する表 TB01 を、セグメント・サイズ 4、4 パーティションで作成します。
CREATE TABLE TB01 (                     
   ACCT_NUM         INTEGER,            
   CUST_LAST_NM     CHAR(15),           
   LAST_ACTIVITY_DT VARCHAR(25),        
   COL2             CHAR(10),           
   COL3             CHAR(25),           
   COL4             CHAR(25),           
   COL5             CHAR(25),           
   COL6             CHAR(55),           
   STATE            CHAR(55))           
 IN DBB.TS01                            
                                        
  PARTITION BY (ACCT_NUM)               
   (PARTITION 1 ENDING AT (199),        
    PARTITION 2 ENDING AT (299),        
    PARTITION 3 ENDING AT (399),        
    PARTITION 4 ENDING AT (MAXVALUE));
変更の始まり例 11: SYSTEM_TIME 期間を使用する表 policy_info を作成し、履歴表 hist_policy_info を作成します。次に、policy_info 表を hist_policy_info 表に関連付ける 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;
変更の終わり
変更の始まり例 12: BUSINESS_TIME 期間を使用する表 policy_info を作成します。
CREATE TABLE policy_info
	(policy_id CHAR(4) NOT NULL,
	 coverage INT NOT NULL,
	 bus_start DATE NOT NULL,
	 bus_end DATE NOT NULL,
	 PERIOD BUSINESS_TIME(bus_start, bus_end));
変更の終わり
変更の始まり例 13: 期間 SYSTEM_TIME と BUSINESS_TIME の両方を使用して履歴行を保持し、ユーザー指定期間を追跡する表 policy_info を作成します。SYSTEM_TIME 期間および BUSINESS_TIME 期間の両方が指定されている表は、バイテンポラル表 と呼ばれることがあります。履歴行を保持できるようにするため、履歴表 hist_policy_info を作成し、ALTER TABLE ステートメントを使用してこの hist_policy_info 表を policy_info 表に関連付ける必要もあります。
CREATE TABLE policy_info
	(policy_id CHAR(4) NOT NULL,
	coverage INT NOT NULL,
	bus_start DATE NOT NULL,
	bus_end DATE 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 BUSINESS_TIME(bus_start, bus_end),
	PERIOD SYSTEM_TIME(sys_start, sys_end));
CREATE TABLE hist_policy_info
	(policy_id CHAR(4) NOT NULL,
	coverage INT NOT NULL,
	bus_start DATE NOT NULL,
	bus_end DATE 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;
変更の終わり
1 この制限は、ステートメントがスキーマ・プロセッサーによって処理され、他の表が同じ CREATE SCHEMA 内で作成されたときに解除されます。