DB2 Version 10.1 for Linux, UNIX, and Windows

CREATE TABLE ステートメント

CREATE TABLE ステートメントは表を定義します。 定義には、その表の名前と、その列の名前および属性を含める必要があります。 定義には、主キーやチェック制約など、表の他の属性を含めることができます。

作成済み一時表を作成するには、CREATE GLOBAL TEMPORARY TABLE ステートメントを使用します。宣言済み一時表を宣言するには、DECLARE GLOBAL TEMPORARY TABLE ステートメントを使用します。

呼び出し

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

許可

このステートメントの許可 ID が持つ特権には、DBADM 権限か、CREATETAB 権限と下記の追加の許可の組み合わせが含まれている必要があります。
  • 以下の特権および権限のいずれか:
    • 表スペースでの USE 特権
    • SYSADM
    • SYSCTRL
  • 加えて、以下の特権および権限のいずれか:
    • データベースに対する IMPLICIT_SCHEMA 権限 (表の暗黙的または 明示的スキーマ名が存在しない場合)
    • スキーマに対する CREATEIN 特権 (表のスキーマ名が既存のスキーマを指す場合)

副表を定義する場合には、許可 ID は表階層のルート表の所有者と同じでなければなりません。

外部キーを定義する場合には、ステートメントの許可 ID が保持する特権として、 親表に対する以下のいずれかが必要になります。
  • 表に対する REFERENCES 特権
  • 指定された親キーのそれぞれの列に対する REFERENCES 特権
  • 表に対する CONTROL 特権
  • DBADM 権限
(全選択を使用して) マテリアライズ照会表を定義するには、以下の基準が満たされていなければなりません。
  • ステートメントの許可 ID が、全選択に指定されている表またはビューのそれぞれに対して以下の特権を少なくとも 1 つ保持していること (グループ特権を除く)。
    • その表またはビューに対する SELECT 特権
    • 表またはビューに対する CONTROL 特権
    • DATAACCESS 権限
  • 全選択に指定されている表またはビューのそれぞれに対して以下の特権を少なくとも 1 つ保持していること。
    • 表またはビューに対する ALTER 特権
    • 表またはビューに対する CONTROL 特権
    • DBADM 権限
マテリアライズ照会表に関連付けられたステージング表を定義するには、 ステートメントの許可 ID に、マテリアライズ照会表に対する以下の特権が少なくとも 1 つ含まれている必要があります。
  • マテリアライズ照会表に対する ALTER 特権
  • マテリアライズ照会表に対する CONTROL 特権
  • DBADM 権限
さらに、マテリアライズ照会表の全選択で識別された個々の表またはビューに対する以下の特権が少なくとも 1 つ含まれている必要があります。
  • 表またはビューに対する SELECT 特権または DATAACCESS 権限、および以下の少なくとも 1 つ。
    • 表またはビューに対する ALTER 特権
    • DBADM 権限
  • 表またはビューに対する CONTROL 特権

構文

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

>--+-| element-list |----------------------------+--●----------->
   +-OF--type-name1--+-------------------------+-+      
   |                 '-| typed-table-options |-' |      
   +-LIKE--+-table-name1-+--+------------------+-+      
   |       +-view-name---+  '-| copy-options |-' |      
   |       '-nickname----'                       |      
   +-| as-result-table |--+------------------+---+      
   |                      '-| copy-options |-'   |      
   +-| materialized-query-definition |-----------+      
   '-| staging-table-definition |----------------'      

>--+----------------------------------------------------------------------+-->
   |                                   .-,-------------------------.      |   
   |                .-DIMENSIONS-.     V                           |      |   
   '-ORGANIZE BY--+-+------------+--(----+-column-name-----------+-+--)-+-'   
                  |                      |    .-,-----------.    |      |     
                  |                      |    V             |    |      |     
                  |                      '-(----column-name-+--)-'      |     
                  +-KEY SEQUENCE--| sequence-key-spec |-----------------+     
                  '-INSERT TIME-----------------------------------------'     

>--●--+---------------------------+--●-------------------------->
      '-DATA CAPTURE--+-NONE----+-'      
                      '-CHANGES-'        

>--+------------------------+--●--+-------------------------+--->
   '-| tablespace-clauses |-'     '-| distribution-clause |-'   

>--●--+-------------------------+------------------------------->
      '-| partitioning-clause |-'   

      .-COMPRESS NO---------------.                             
>--●--+---------------------------+--●--+-------------------+--->
      |              .-ADAPTIVE-. |     '-VALUE COMPRESSION-'   
      '-COMPRESS YES-+----------+-'                             
                     '-STATIC---'                               

>--●--+-----------------------+--●--+----------------------+---->
      '-WITH RESTRICT ON DROP-'     '-NOT LOGGED INITIALLY-'   

>--●--+--------------------+------------------------------------>
      '-CCSID--+-ASCII---+-'   
               '-UNICODE-'     

>--●--+------------------------------+--●----------------------->
      '-SECURITY POLICY--policy name-'      

>--+-------------------------------------------------------+---><
   |             .-,----------------------------------.    |   
   |             V                                    |    |   
   '-OPTIONS--(----table-option-name--string-constant-+--)-'   

element-list

      .-,------------------------------.      
      V                                |      
|--(----+-| column-definition |------+-+--)---------------------|
        +-| period-definition |------+        
        +-| unique-constraint |------+        
        +-| referential-constraint |-+        
        '-| check-constraint |-------'        

column-definition

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

data-type

|--+-| built-in-type |------+-----------------------------------|
   |                    (2) |   
   +-distinct-type-name-----+   
   +-structured-type-name---+   
   '-REF--(type-name2)------'   

built-in-type

|--+-+-SMALLINT----+-----------------------------------------------------------------+--|
   | +-+-INTEGER-+-+                                                                 |   
   | | '-INT-----' |                                                                 |   
   | '-BIGINT------'                                                                 |   
   |                  .-(5,0)-------------------.                                    |   
   +-+-+-DECIMAL-+-+--+-------------------------+------------------------------------+   
   | | '-DEC-----' |  |          .-,0-------.   |                                    |   
   | '-+-NUMERIC-+-'  '-(integer-+----------+-)-'                                    |   
   |   '-NUM-----'               '-,integer-'                                        |   
   |          .-(53)------.                                                          |   
   +-+-FLOAT--+-----------+--+-------------------------------------------------------+   
   | |        '-(integer)-'  |                                                       |   
   | +-REAL------------------+                                                       |   
   | |         .-PRECISION-. |                                                       |   
   | '-DOUBLE--+-----------+-'                                                       |   
   |           .-(34)-.                                                              |   
   +-DECFLOAT--+------+--------------------------------------------------------------+   
   |           '-(16)-'                                                              |   
   |                    .-(1 BYTE)------------.                                      |   
   +-+-+-+-CHARACTER-+--+---------------------+----------+--+--------------------+-+-+   
   | | | '-CHAR------'  |          .-BYTE-.   |          |  |  (3)               | | |   
   | | |                '-(integer-+------+-)-'          |  '-------FOR BIT DATA-' | |   
   | | |                                      .-BYTE-.   |                         | |   
   | | '-+-VARCHAR----------------+--(integer-+------+-)-'                         | |   
   | |   '-+-CHARACTER-+--VARYING-'                                                | |   
   | |     '-CHAR------'                                                           | |   
   | |                                  .-(1M)-------------.                       | |   
   | '-+-CLOB------------------------+--+------------------+-----------------------' |   
   |   '-+-CHARACTER-+--LARGE OBJECT-'  '-(integer-+---+-)-'                         |   
   |     '-CHAR------'                             +-K-+                             |   
   |                                               +-M-+                             |   
   |                                               '-G-'                             |   
   |            .-(1)-------.                                                        |   
   +-+-GRAPHIC--+-----------+-------+------------------------------------------------+   
   | |          '-(integer)-'       |                                                |   
   | +-VARGRAPHIC--(integer)--------+                                                |   
   | |         .-(1M)-------------. |                                                |   
   | '-DBCLOB--+------------------+-'                                                |   
   |           '-(integer-+---+-)-'                                                  |   
   |                      +-K-+                                                      |   
   |                      +-M-+                                                      |   
   |                      '-G-'                                                      |   
   |                                  .-(1)-------.                                  |   
   +-+-+-+-NCHAR-------------------+--+-----------+------+-------+-------------------+   
   | | | '-NATIONAL--+-CHAR------+-'  '-(integer)-'      |       |                   |   
   | | |             '-CHARACTER-'                       |       |                   |   
   | | '-+-NVARCHAR-------------------------+--(integer)-'       |                   |   
   | |   +-NCHAR VARYING--------------------+                    |                   |   
   | |   '-NATIONAL--+-CHAR------+--VARYING-'                    |                   |   
   | |               '-CHARACTER-'                               |                   |   
   | |                                      .-(1M)-------------. |                   |   
   | '-+-NCLOB---------------------------+--+------------------+-'                   |   
   |   +-NCHAR LARGE OBJECT--------------+  '-(integer-+---+-)-'                     |   
   |   '-NATIONAL CHARACTER LARGE OBJECT-'             +-K-+                         |   
   |                                                   +-M-+                         |   
   |                                                   '-G-'                         |   
   |                          .-(1M)-------------.                                   |   
   +-+-BLOB----------------+--+------------------+-----------------------------------+   
   | '-BINARY LARGE OBJECT-'  '-(integer-+---+-)-'                                   |   
   |                                     +-K-+                                       |   
   |                                     +-M-+                                       |   
   |                                     '-G-'                                       |   
   +-+-DATE-------------------------+------------------------------------------------+   
   | +-TIME-------------------------+                                                |   
   | |            .-(--6--)-------. |                                                |   
   | '-TIMESTAMP--+---------------+-'                                                |   
   |              '-(--integer--)-'                                                  |   
   +-XML-----------------------------------------------------------------------------+   
   | .-SYSPROC.-.                   (4) (5)                                          |   
   '-+----------+--DB2SECURITYLABEL--------------------------------------------------'   

column-options

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

lob-options

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

references-clause

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

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

rule-clause

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

constraint-attributes

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

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

default-clause

   .-WITH-.                                    
|--+------+--DEFAULT--+--------------------+--------------------|
                      '-| default-values |-'   

default-values

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

generated-clause

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

identity-options

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

as-row-change-timestamp-clause

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

as-generated-expression-clause

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

as-row-transaction-timestamp-clause

    (12)                       
|---------AS--ROW--+-BEGIN-+------------------------------------|
                   '-END---'   

as-row-transaction-start-id-clause

    (13)                             
|---------AS--TRANSACTION START ID------------------------------|

period-definition

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

unique-constraint

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

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

referential-constraint

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

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

check-constraint

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

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

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

check-condition

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

functional-dependency

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

typed-table-options

|--+---------------------------+--+------------------------+----|
   +-HIERARCHY--hierarchy-name-+  '-| typed-element-list |-'   
   '-| under-clause |----------'                               

under-clause

|--UNDER--supertable-name--INHERIT SELECT PRIVILEGES------------|

typed-element-list

      .-,-----------------------------.      
      V                               |      
|--(----+-| OID-column-definition |-+-+--)----------------------|
        +-| with-options |----------+        
        +-| unique-constraint |-----+        
        '-| check-constraint |------'        

OID-column-definition

|--REF IS--OID-column-name--USER GENERATED----------------------|

with-options

|--column-name--WITH OPTIONS--| column-options |----------------|

as-result-table

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

>--WITH NO DATA-------------------------------------------------|

materialized-query-definition

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

>--| refreshable-table-options |--------------------------------|

copy-options

|--●--+-------------------------------------+--●---------------->
      |                .-COLUMN-.           |      
      '-+-INCLUDING-+--+--------+--DEFAULTS-'      
        '-EXCLUDING-'                              

                         .-COLUMN ATTRIBUTES-.        
   .-EXCLUDING IDENTITY--+-------------------+-.      
>--+-------------------------------------------+--●-------------|
   |                     .-COLUMN ATTRIBUTES-. |      
   '-INCLUDING IDENTITY--+-------------------+-'      

refreshable-table-options

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

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

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

staging-table-definition

|--+-------------------------------+--FOR--table-name2---------->
   |    .-,-------------------.    |                     
   |    V                     |    |                     
   '-(----staging-column-name-+--)-'                     

>--PROPAGATE IMMEDIATE------------------------------------------|

sequence-key-spec

      .-,-----------------------------------------------------------------------.      
      V                                                        .-AT-.           |      
|--(----column-name--+------------------------------+--ENDING--+----+--constant-+--)-->
                     |           .-FROM-.           |                                  
                     '-STARTING--+------+--constant-'                                  

>--+-ALLOW OVERFLOW----+--+------------------+------------------|
   '-DISALLOW OVERFLOW-'  '-PCTFREE--integer-'   

tablespace-clauses

|--+---------------------------------------+--●----------------->
   |     .-,---------------.               |      
   |     V                 |  .-CYCLE----. |      
   '-IN----tablespace-name-+--+----------+-'      
                              '-NO CYCLE-'        

>--+--------------------------------+--------------------------->
   |                           (14) |   
   '-INDEX IN--tablespace-name------'   

>--+------------------------------+-----------------------------|
   |          .-,---------------. |   
   |          V                 | |   
   '-LONG IN----tablespace-name-+-'   

distribution-clause

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

partitioning-clause

                 .-RANGE-.                             
|--PARTITION BY--+-------+--| range-partition-spec |------------|

range-partition-spec

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

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

partition-expression

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

partition-element

|--+-+---------------------------+--| boundary-spec |--| partition-tablespace-options |-+--|
   | '-PARTITION--partition-name-'                                                      |   
   '-| boundary-spec |--EVERY--+-(--constant--+-------------------------+--)-+----------'   
                               |              |                    (15) |    |              
                               |              '-| duration-label |------'    |              
                               '-constant--+-------------------------+-------'              
                                           |                    (15) |                      
                                           '-| duration-label |------'                      

boundary-spec

                         (16)                        
|--+-| starting-clause |-------| ending-clause |-+--------------|
   '-| ending-clause |---------------------------'   

starting-clause

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

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

ending-clause

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

partition-tablespace-options

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

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

duration-label

|--+-YEAR---------+---------------------------------------------|
   +-YEARS--------+   
   +-MONTH--------+   
   +-MONTHS-------+   
   +-DAY----------+   
   +-DAYS---------+   
   +-HOUR---------+   
   +-HOURS--------+   
   +-MINUTE-------+   
   +-MINUTES------+   
   +-SECOND-------+   
   +-SECONDS------+   
   +-MICROSECOND--+   
   '-MICROSECONDS-'   

注:
  1. 選択する最初の column-option が、 generation-expression を指定した generated-clause の場合、data-type を省略することができます。 これは、generation-expression の処理結果のデータ・タイプから判別されます。
  2. 指定した特殊タイプは、いかなるデータ・タイプ制約も持つことができません。また、ソース・タイプがアンカー・データ・タイプであってはなりません。
  3. FOR BIT DATA 節とその後に続く他の列制約とは、任意の順序で指定できます。
  4. DB2SECURITYLABEL は、保護対象表の行セキュリティー・ラベル列を定義するために使用しなければならない組み込み特殊タイプです。
  5. タイプ DB2SECURITYLABEL の列の場合、NOT NULL WITH DEFAULT は暗黙指定になるので、明示的に指定することはできません (SQLSTATE 42842)。タイプ DB2SECURITYLABEL の列のデフォルト値は、セッション許可 ID の書き込みアクセスのためのセキュリティー・ラベルです。
  6. lob-options (LOB オプション) 節は、 ラージ・オブジェクト・タイプ (BLOB、CLOB、および DBCLOB) と、 ラージ・オブジェクト・タイプに基づく特殊タイプに対してのみ適用されます。
  7. SCOPE 節は REF タイプに対してのみ適用されます。
  8. 同じ列定義で default-clause と generated-clause の両方を指定することはできません (SQLSTATE 42614)。
  9. INLINE LENGTH は、構造化タイプ、XML タイプ、または LOB タイプとして定義された列に対してのみ用います。
  10. 同じ節を複数回指定することはできません。
  11. 最初に指定された column-option が generated-clause の場合は、行変更タイム・スタンプ列のデータ・タイプはオプションです。データ・タイプのデフォルトは TIMESTAMP(6) です。
  12. 最初に指定された column-option が generated-clause の場合は、行開始タイム・スタンプ列および行終了タイム・スタンプ列のデータ・タイプはオプションです。データ・タイプのデフォルトは TIMESTAMP(12) です。
  13. 最初に指定された column-option が generated-clause の場合は、トランザクション開始 ID タイム・スタンプ列のデータ・タイプはオプションです。データ・タイプのデフォルトは TIMESTAMP(12) です。
  14. どの表スペースに表の索引を組み込むかは、表を作成するときに指定できます。 表がパーティション表の場合、非パーティション索引に関する索引表スペースは、CREATE INDEX ステートメントの IN 節で指定できます。
  15. この partition-element の構文は、数値または日時データ・タイプを伴う partition-expression が 1 つだけ存在する場合に有効です。
  16. 最初の partition-element には starting-clause が、最後の partition-element には ending-clause が含まれている必要があります。

説明

システム保守のマテリアライズ照会表とユーザー保守のマテリアライズ照会表は、 それぞれを個別に識別する必要が生じない限り、 どちらもマテリアライズ照会表 と呼びます。

table-name
表の名前を指定します。 暗黙または明示の修飾子を含む名前は、カタログに記述されている表、ビュー、ニックネーム、または別名を指定するものであってはなりません。 スキーマ名は SYSIBM、SYSCAT、SYSFUN、または SYSSTAT であってはなりません (SQLSTATE 42939)。
element-list
表のエレメントを定義します。 これには、表の列と制約の定義が含まれます。
column-definition
列の属性を定義します。
column-name
表を構成する列の名前を指定します。 名前を修飾したり、表の複数の列に対して同じ名前を使用したりすることはできません (SQLSTATE 42711)。
表には、以下のものを指定できます。
  • 4K ページ・サイズの場合、最大 500 列。列のバイト・カウントは 4,005 を超えてはなりません。
  • 8K ページ・サイズの場合、最大 1,012 列。列のバイト・カウントは 8,101 を超えてはなりません。
  • 16K ページ・サイズの場合、最大 1,012 列。列のバイト・カウントは 16,293 を超えてはなりません。
  • 32K ページ・サイズの場合、最大 1,012 列。列のバイト・カウントは 32,677 を超えてはなりません。

詳細については、行サイズの制限を参照してください。

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

精度と位取りが指定されない場合、デフォルト値の 5,0 が使用されます。 NUMERIC および NUM は、 DECIMAL および DEC の同義語として使用可能です。

FLOAT(integer)
単精度または倍精度の浮動小数点数 (integer の値によって異なる)。 integer の値は、1 から 53 の範囲の整数でなければなりません。 1 から 24 の値は単精度、25 から 53 の値は倍精度を示します。
また、以下を指定することもできます。
REAL
単精度浮動小数点数。
DOUBLE
倍精度浮動小数点数。
DOUBLE PRECISION
倍精度浮動小数点数。
FLOAT
倍精度浮動小数点数。
DECFLOAT(precision-integer)
10 進浮動小数点数。 precision-integer の値は数値の精度です。 つまり数字の総桁数で 16 または 34 です。

精度を指定しない場合、デフォルト値 34 が使用されます。

CHARACTER(integer) または CHAR(integer) または CHARACTER または CHAR
長さ integer (整数) バイトの固定長文字ストリング。長さは、1 から 254 の範囲で指定できます。長さの指定がない場合、長さが 1 であると想定されます。
VARCHAR(integer)または CHARACTER VARYING(integer)または CHAR VARYING(integer)
最大長が integer バイトの可変長文字ストリング。最大長は、1 から 32,672 の範囲で指定できます。
FOR BIT DATA
列の内容をビット (バイナリー) データとして扱うように指定します。 他のシステムとのデータ交換の過程で、 コード・ページ変換は行われません。 比較は、データベース照合シーケンスに関係なくバイナリーで行われます。
CLOB または CHARACTER (CHAR) LARGE OBJECT(integer [K | M | G])
文字ラージ・オブジェクト・ストリング (最大長をバイト単位で指定)。

integer K | M | G の意味は、BLOB の場合と同じです。

長さの指定がない場合、長さが 1,048,576 (1 メガバイト) であると想定されます。

CLOB 列の場合に、FOR BIT DATA 節を指定することはできません。 ただし、CLOB 列に CHAR FOR BIT DATA ストリングを割り当てることができ、 CLOB ストリングに CHAR FOR BIT DATA ストリングを連結することができます。

GRAPHIC(integer)
長さ integer (整数) の固定長 GRAPHIC ストリング。 長さは、1 から 127 の範囲で指定できます。 長さの指定がない場合、長さが 1 であると想定されます。
VARGRAPHIC(integer)
最大長が integer の可変長 GRAPHIC ストリング。長さは、1 から 16,336 の範囲で指定できます。
DBCLOB(integer [K | M | G])
2 バイト文字ラージ・オブジェクト・ストリング (最大長を 2 バイト文字の数で指定)。

integer K | M | G の意味は、BLOB の場合に類似しています。 指定する数値が 2 バイト文字 1 個を 1 文字と数えた値であることと、最大サイズが 2 バイト文字 1,073,741,823 個であるという点が違います。

長さの指定がない場合、長さが 2 バイト文字 1,048,576 個であると想定されます。

NATIONAL CHARACTER (integer) または NATIONAL CHAR (integer) または NCHAR (integer)
長さ integer (整数) の固定長 GRAPHIC ストリング。 長さは、1 から 127 の範囲で指定できます。 長さの指定がない場合、長さが 1 であると想定されます。
NATIONAL CHARACTER VARYING (integer) または NATIONAL CHAR VARYING (integer) または NCHAR VARYING (integer) または NVARCHAR (integer)
最大長が integer の可変長 GRAPHIC ストリング。長さは、1 から 16,336 の範囲で指定できます。
NATIONAL CHARACTER LARGE OBJECT (integer[K|M|G]) または NCHAR LARGE OBJECT (integer[K|M|G]) または NCLOB(integer[K|M|G])
2 バイト文字ラージ・オブジェクト・ストリング (最大長を 2 バイト文字の数で指定)。

integer K | M | G の意味は、BLOB の場合に類似しています。 指定する数値が 2 バイト文字 1 個を 1 文字と数えた値であることと、最大サイズが 2 バイト文字 1,073,741,823 個であるという点が違います。

長さの指定がない場合、長さが 1,048,576 (2 バイト文字) であると想定されます。

BLOB または BINARY LARGE OBJECT(integer [K | M | G])
バイナリー・ラージ・オブジェクト・ストリング (最大長をバイト単位で指定)。

長さは、1 バイトから 2,147,483,647 バイトの範囲で指定できます。

integer (整数) だけを指定した場合は、それが最大長になります。

integer K (大文字または小文字) を指定した場合、最大長は integer の 1,024 倍になります。integer の最大値は 2,097,152 です。

integer M を指定した場合、 最大長は integer の 1,048,576 倍になります。integer の最大値は 2,048 です。

integer G を指定した場合、 最大長は integer の 1,073,741,824 倍になります。integer の最大値は 2 です。

計算結果が 2,147,483,648 を超える K、M、または G の倍数を指定すると、使用される実際の値は 2,147,483,647 (2 ギガバイト - 1 バイト) になります。これは LOB 列の最大長です。

長さの指定がない場合、長さが 1,048,576 (1 メガバイト) であると想定されます。

integer と K、M、または G の間には、任意の数のスペースを使用できます。 スペースは必須ではありません。 例えば、次の例はすべて有効です。
   BLOB(50K)    BLOB(50 K)    BLOB (50   K)
DATE
日付を示します。
TIME
時刻を示します。
TIMESTAMP(integer) または TIMESTAMP
タイム・スタンプを示します。integer は 0 から 12 までの整数で、秒未満の精度を 0 (秒) から 12 (ピコ秒) で指定します。デフォルトは 6 (マイクロ秒) です。
XML
XML 文書を示します。 XML 列には整形式 XML 文書だけを挿入できます。
XML 列には、以下の制限事項があります。
  • 列は、XML データに対する索引以外の索引の一部であってはなりません。 したがって、この列を主キーまたはユニーク制約の列として組み込むことはできません (SQLSTATE 42962)。
  • 列は参照制約の外部キーであってはなりません (SQLSTATE 42962)。
  • 列にデフォルト値 (WITH DEFAULT) を指定することはできません (SQLSTATE 42613)。列が NULL 可能な場合、その列のデフォルトは NULL 値です。
  • 列は、分散キーとしては使用できません (SQLSTATE 42997)。
  • その列は、データ・パーティション・キーとしては使用できません (SQLSTATE 42962)。
  • その列は、マルチディメンション・クラスタリング (MDC) 表の編成に使用できません (SQLSTATE 42962)。
  • 列は、範囲がクラスター化された表では使用できません (SQLSTATE 429BG)。
  • 列は、VALIDATED 述部以外のチェック制約では参照できません (SQLSTATE 42621)。

タイプ XML の列を作成すると、その列に対する XML パス索引が作成されます。タイプ XML の最初の列を作成するときには、表レベルの XML 領域索引も作成されます。これらの索引の名前は、'SQL' の後に文字タイム・スタンプ (yymmddhhmmssxxx) を付けた形になります。スキーマ名は SYSIBM です。

SYSPROC.DB2SECURITYLABEL
これは、保護対象表の行セキュリティー・ラベル列を定義するために使用しなければならない組み込み特殊タイプです。組み込み特殊タイプ DB2SECURITYLABEL の列の基礎データ・タイプは、VARCHAR(128) FOR BIT DATA です。1 つの表にはタイプ DB2SECURITYLABEL の列を最大で 1 個しか組み込めません (SQLSTATE 428C1)
distinct-type-name
ユーザー定義タイプの中で特殊タイプであるものを示します。 スキーマ名を伴わない特殊タイプ名を指定した場合、 その特殊タイプ名は SQL パスのスキーマから探索することによって解決されます (このパスは、 静的 SQL の場合は FUNCPATH プリプロセス・オプションによって、 動的 SQL の場合は CURRENT PATH レジスターによって定義されます)。

特殊タイプを使用して列を定義する場合、 その列のデータ・タイプはその特殊タイプになります。 列の長さと位取りは、それぞれ特殊タイプのソース・タイプの長さと位取りになります。 指定した特殊タイプは、いかなるデータ・タイプ制約も持つことができません。また、ソース・タイプがアンカー・データ・タイプであってはなりません (SQLSTATE 428H2)。

特殊タイプを使用して定義された列が参照制約の外部キーである場合、 主キーの対応する列のデータ・タイプは、同じ特殊タイプでなければなりません。

structured-type-name
ユーザー定義タイプの中で構造化タイプであるものを示します。 構造化タイプ名の指定にスキーマ名が含まれていない場合、 その構造化タイプ名は SQL パスのスキーマから探索することによって決まります (このパスは、 静的 SQL の場合は FUNCPATH 前処理オプションによって、 動的 SQL の場合は CURRENT PATH レジスターによって定義されます)。

構造化タイプを使用して列を定義する場合、 その列の静的データ・タイプはその構造化タイプになります。 その列には、 structured-type-name のサブタイプである動的タイプを持つ値を組み込むことができます。

構造化タイプを使用して定義された列を、主キー、ユニーク制約、外部キー、索引キー、 または分散キー内で使うことはできません (SQLSTATE 42962)。

列が、構造化タイプを使用して定義されていて、 ネストのいずれかのレベルで参照タイプ属性をもっている場合、 その参照タイプ属性の有効範囲は解除されます。 そのような属性を間接参照操作で使用するには、 CAST 指定を使って SCOPE を明示的に指定する必要があります。

REF (type-name2)
型付き表への参照。 type-name2 の指定にスキーマ名が含まれていない場合、 そのタイプ名は SQL パス上のスキーマを探索することによって決まります (このパスは、 静的 SQL の場合は FUNCPATH プリプロセス・オプションによって、 動的 SQL の場合は CURRENT PATH レジスターによって定義されます)。 この列の基礎を成すデータ・タイプは、 CREATE TYPE ステートメントの REF USING 節で type-name2 に対して指定された表示データ・タイプに基づくか、 または type-name2 の入ったデータ・タイプ階層のルート・タイプに基づきます。
column-options
表の列に関連した追加オプションを定義します。
NOT NULL
列に NULL 値が入るのを防止します。

NOT NULL を指定しない場合、列に NULL 値を含めることができます。 また、そのデフォルト値は、NULL 値 または WITH DEFAULT 節で指定される値のいずれかになります。

NOT HIDDEN または IMPLICITLY HIDDEN
列を隠し列と定義するかどうかを指定します。列を表の暗黙的参照に組み込むかどうか、SQL ステートメントで明示的に参照できるかどうかは隠し属性によって決まります。 デフォルトは NOT HIDDEN です。
NOT HIDDEN
列を表の暗黙的参照に組み込むこと、および列を明示的に参照できることを指定します。
IMPLICITLY HIDDEN
名前で明示的に参照されない限り列は SQL ステートメントから不可視であることを指定します。例えば、表に IMPLICITLY HIDDEN 節によって定義された列が組み込まれている場合、暗黙的に隠された列は SELECT * の結果に組み込まれません。 しかし、暗黙的に隠された列の名前を明示的に参照する SELECT の結果については、結果表にその列が組み込まれます。

IMPLICITLY HIDDEN を表のすべての列に指定することはできません (SQLSTATE 428GU)。

lob-options
LOB データ・タイプのオプションを指定します。
LOGGED
列に対して行われた変更をログに書き込むことを指定します。 このような列のデータは、 データベース・ユーティリティー (RESTORE DATABASE など) によってリカバリー可能です。 LOGGED はデフォルト値です。
NOT LOGGED
列に対して行われた変更をログに書き込まないことを指定します。 これは、インラインでない LOB データにのみ適用されます。

NOT LOGGED は、コミットやロールバックの操作には影響しません。つまり、トランザクションがロールバックされても、LOB の値がログ記録されるか否かに関係なくデータベースの整合性は保持されます。ロギングされないので、ロールフォワード操作中、 バックアップまたはロード操作の後の LOB データは、 ロールフォワード操作中に、ログ・レコードがあれば再生されたはずの LOB 値をゼロで置換したものになります。 クラッシュ・リカバリーの過程で、コミットされた変更とロールバックされた変更すべてに、 予期された結果が反映されます。

COMPACT
後続の付加操作で使用するためのスペースを LOB ストレージ域の最後に残すことなく、LOB 列の値で消費されるディスク・スペースを最小限にすることを指定します (LOB 値が使用する最後のグループ内の余分なディスク・ページすべてを解放します)。 このようにしてデータを保管した場合、 列に対する付加操作 (長さを増加する操作) でパフォーマンスが低下することがあります。
NOT COMPACT
列の LOB 値に対する将来の変更に備えて、 いくらかのスペースを挿入するように指定します。 これはデフォルトです。
SCOPE
参照タイプ列の有効範囲を指定します。

間接参照演算子の左オペランド、または DEREF 関数の引数として使用する列には、 すべて有効範囲を指定する必要があります。 参照タイプ列の指定は、後続の ALTER TABLE ステートメントまで遅らせることができます。これにより、ターゲット表を定義できるようになります (通常は、 相互参照表の場合)。

typed-table-name
型付き表の名前。 この表は既に存在しているものか、 作成する表と同じ名前のものでなければなりません (SQLSTATE 42704)。 column-name のデータ・タイプは REF(S) でなければなりません。 Styped-table-name のタイプを表します (SQLSTATE 428DM)。 column-name に割り当てられた値が、 typed-table-name に存在する行を 実際に参照しているかどうかを示す検査は行われません。
typed-view-name
型付きビューの名前。 このビューは既に存在しているものか、 作成するビューと同じ名前のものでなければなりません (SQLSTATE 42704)。 column-name のデータ・タイプは REF(S) でなければなりません。 Styped-view-name のタイプを表します (SQLSTATE 428DM)。 column-name に割り当てられた値が、 typed-view-name に存在する行を実際に参照しているかどうかを示す検査は行われません。
CONSTRAINT constraint-name
制約の名前を指定します。 constraint-name (制約名) は、 同じ CREATE TABLE ステートメントに既に指定されている制約を指定するものであってはなりません (SQLSTATE 42710)。

この節が省略された場合は、表に定義されている既存の制約の ID の中でユニークな 18 バイトの長さの ID がシステムによって生成されます。 (ID は、"SQL" の後に続く、タイム・スタンプ機能に基づいて生成される一連の 15 の数字で構成されます。)

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

PRIMARY KEY
これは、1 つの列からなる主キーを定義する簡単な方法です。 つまり、PRIMARY KEY が列 C の定義で指定されている場合、 その効果は、PRIMARY KEY(C) 節を独立した節として指定する場合と同じです。

表が副表である場合、主キーはスーパー表から継承されるので、 主キーを指定することはできません (SQLSTATE 429B3)。

ROW CHANGE TIMESTAMP 列を主キーの一部として使用することはできません (SQLSTATE 429BV)。

行開始列、行終了列、およびトランザクション開始 ID 列を主キーの一部として使用することはできません (SQLSTATE 429BV)。

unique-constraint の説明の中の PRIMARY KEY を参照してください。

UNIQUE
これは、1 つの列からなるユニーク・キーを定義する簡単な方法です。 すなわち、UNIQUE を列 C の定義に指定すると、 UNIQUE(C) 節を独立した節として指定した場合と同じ結果になります。

表が副表である場合、ユニーク制約はスーパー表から継承されるので、ユニーク制約を指定することはできません (SQLSTATE 429B3)。

unique-constraint の説明の中の UNIQUE を参照してください。

references-clause
これは、1 つの列からなる外部キーを定義する簡単な方法です。 つまり、references-clause が列 C の定義に指定されている場合、 その効果は、 列として C しか指定されていない FOREIGN KEY 節の一部として references-clause が指定された場合と同じになります。

referential-constraint の説明の references-clause を参照してください。

CHECK (check-condition)
これは、1 つの列に適用されるチェック制約を定義する簡単な方法です。 CHECK (check-condition) の説明を参照してください。
default-clause
列のデフォルト値を指定します。
WITH
オプション・キーワード。
DEFAULT

挿入で値が設定されなかった場合、あるいは INSERT または UPDATE で値が DEFAULT に指定されている場合に、デフォルト値を提供します。 DEFAULT キーワードの後にデフォルト値が指定されていない場合、 使用されるデフォルト値は列のデータ・タイプによって異なります。 『ALTER TABLE』を参照してください。 列定義で、この節を generated-clause とともに指定することはできません (SQLSTATE 42614)。

列を XML として定義する場合、デフォルト値は指定できません (SQLSTATE 42613)。可能なデフォルト値は NULL だけです。

列が型付き表の列に基づいている場合、 デフォルト値の定義時には特定のデフォルト値を指定する必要があります。 型付き表のオブジェクト ID の列には、 デフォルト値を指定することはできません (SQLSTATE 42997)。

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

構造化タイプを使用して列を定義する場合は、 default-clause を指定できません (SQLSTATE 42842)。

column-definition から DEFAULT を省略すると、 その列のデフォルト値として NULL 値が使用されます。 そのような列を NOT NULL と定義すると、その列には有効なデフォルトはなくなります。

default-values
default-values に指定できるデフォルト値のタイプは、以下のとおりです。
constant
列のデフォルト値として定数を指定します。 指定する定数は、次の条件を満たしていなければなりません。
  • 割り当ての規則に従って、 その列に割り当てることができる値でなければなりません。
  • その列が浮動小数点数データ・タイプとして定義されている場合を除き、浮動小数点の定数を指定してはなりません。
  • 列のデータ・タイプが 10 進浮動小数点数の場合は、数値定数または 10 進浮動小数点特殊値でなければなりません。 浮動小数点定数はまず DOUBLE として解釈され、次にターゲット列が DECFLOAT である場合は 10 進浮動小数点数に変換されます。 DECFLOAT(16) 列では、16 桁を超える精度を持つ 10 進定数は、CURRENT DECFLOAT ROUNDING MODE 特殊レジスターにより指定される丸めモードを使用して丸められます。
  • 定数が 10 進定数の場合、 その列のデータ・タイプの位取りを超えるゼロ以外の数字を含めてはなりません (例えば、 DECIMAL(5,2) の列のデフォルト値として 1.234 を指定することはできません)。
  • 指定する定数が 254 バイトを超えてはなりません。この制約には、 引用符文字や 16 進定数の X などの接頭部文字も含まれます。さらに、 定数が cast-function の引数の場合には、 完全修飾された関数名から取った文字や括弧も含めて、この制限を超えてはなりません。
datetime-special-register
INSERT、UPDATE、または LOAD の実行時における日時特殊レジスターの値 (CURRENT DATE、 CURRENT TIME、または CURRENT TIMESTAMP) を、その列のデフォルト値として指定します。 その列のデータ・タイプは、 指定した特殊レジスターに対応するデータ・タイプでなければなりません (例えば、 CURRENT DATE を指定した場合、データ・タイプは DATE でなければなりません)。
user-special-register
INSERT、UPDATE、または LOAD の実行時におけるユーザー特殊レジスターの値 (CURRENT USER、 SESSION_USER、SYSTEM_USER) を、その列のデフォルトとして指定します。 その列のデータ・タイプは、 ユーザー特殊レジスターの長さ属性よりも短い文字ストリングであってはなりません。 なお、SESSION_USER の代わりに USER を、 CURRENT USER の代わりに CURRENT_USER を指定することもできます。
CURRENT SCHEMA
INSERT、UPDATE、または LOAD の実行時における CURRENT SCHEMA 特殊レジスターの値を、 その列のデフォルト値として指定します。 CURRENT SCHEMA を指定した場合、その列のデータ・タイプは、 CURRENT SCHEMA 特殊レジスターの長さ属性よりも短い文字ストリングであってはなりません。
CURRENT MEMBER
INSERT、UPDATE、または LOAD の実行時における CURRENT MEMBER 特殊レジスターの値を、 その列のデフォルト値として指定します。 CURRENT MEMBER を指定する場合、列のデータ・タイプは整数の割り当てを許容するものでなければなりません。
NULL
その列のデフォルト値として NULL を指定します。 NOT NULL が指定された場合は、DEFAULT NULL を同じ列定義に指定できますが、その列をデフォルト値に設定しようとするとエラーが生じます。
cast-function
この形式のデフォルト値は、特殊タイプ (distinct type)、 BLOB、または日時 (DATE、TIME、 または TIMESTAMP) データ・タイプとして定義された列に対してのみ使用することができます。 特殊タイプで、BLOB や日時タイプに基づいている場合以外は、 関数名が列の特殊タイプの名前に一致していなければなりません。 スキーマ名で修飾されている場合には、 その特殊タイプのスキーマ名と同じでなければなりません。 修飾されていない場合には、 関数の解決で得られるスキーマ名は特殊タイプのスキーマ名と同じでなければなりません。 日時タイプに基づく特殊タイプで、デフォルト値が定数の場合、 必ず関数を使用する必要があります。さらに、その関数名は、 暗黙または明示のスキーマ名 SYSIBM を持つ特殊タイプのソース・タイプ名に一致していなければなりません。 他の日時列の場合は、対応する日時関数も使用できます。 BLOB または、BLOB に基づく特殊タイプの場合も、関数を使用する必要があります。 その関数名は、暗黙または明示のスキーマ名 SYSIBM を持つ BLOB でなければなりません。
constant
引数として定数を指定します。 指定する定数は、 特殊タイプのソース・タイプに関する定数の規則 (特殊タイプでない場合は、 データ・タイプに関する定数の規則) に従っていなければなりません。 cast-function が BLOB の場合には、 定数としてストリング定数を指定する必要があります。
datetime-special-register
CURRENT DATE、CURRENT TIME、または CURRENT TIMESTAMP を指定します。 列の特殊タイプのソース・タイプは、 指定した特殊レジスターに対応するデータ・タイプでなければなりません。
user-special-register
CURRENT USER、SESSION_USER、または SYSTEM_USER を指定します。 列の特殊タイプのソース・タイプのデータ・タイプは、 少なくとも 8 バイトの長さのストリング・データ・タイプでなければなりません。 cast-function が BLOB の場合には、 長さ属性が 8 バイト以上でなければなりません。
CURRENT SCHEMA
CURRENT SCHEMA 特殊レジスターの値を指定します。 列の特殊タイプのソース・タイプのデータ・タイプは、CURRENT SCHEMA 特殊レジスターの長さ属性よりも短い文字ストリングであってはなりません。 cast-function が BLOB の場合には、長さ属性が 8 バイト以上でなければなりません。
EMPTY_CLOB()、EMPTY_DBCLOB()、または EMPTY_BLOB()
その列のデフォルト値として長さゼロのストリングを指定します。 その列は、この関数の結果データ・タイプに対応するデータ・タイプを持っている必要があります。

指定した値が無効な場合、エラーが戻されます (SQLSTATE 42894)。

generated-clause
列の生成値を指定します。
GENERATED

DB2® が列の値を生成することを指定します。 その列が ID 列、行変更タイム・スタンプ列、行開始列、行終了列、トランザクション開始 ID 列、または生成式列であると見なされる場合、GENERATED を指定する必要があります。 GENERATED として定義された列にはデフォルト節を指定することはできません (SQLSTATE 42623)。

ALWAYS
行が表に挿入されるときや、generation-expression の結果値が変更されるたびに、 必ず、この列に値を生成するように指定します。 この式の結果は、表に保管されます。 データ伝搬、またはアンロードおよび再ロード操作を実行しているのでなければ、 GENERATED ALWAYS の値をお勧めします。 GENERATED ALWAYS は、生成列に必須の値です。
BY DEFAULT
DEFAULT 節を指定して行が挿入または更新されるときに、 明示的に値を指定しないかぎり、DB2 が列に値を生成することを指定します。 データ伝搬を使用したり、アンロードおよび再ロードを実行したりするときは、 BY DEFAULT が推奨される値です。

明示的には要求されませんが、値の固有性を確保するために、生成された ID 列には固有の 1 列の索引を定義してください。

AS IDENTITY
列をこの表の ID 列にすることを指定します。 1 つの表には 1 つしか ID 列があってはなりません (SQLSTATE 428C1)。 列に関連付けられたデータ・タイプがゼロの位取りの完全な数値タイプになっているか、 ソース・タイプのユーザー定義特殊タイプがゼロの位取りの完全な数値タイプになっている場合だけ、 IDENTITY キーワードが指定可能です (SQLSTATE 42815)。 ゼロの位取りの SMALLINT、INTEGER、BIGINT、または DECIMAL や、 これらのタイプのうちのいずれかに基づいた特殊タイプは、完全な数値タイプと見なされます。 これに対して、単精度および倍精度の浮動小数点数は、近似数値データ・タイプと見なされます。 参照タイプは、完全な数値タイプで表されていても、ID 列と定義することはできません。

ID 列は暗黙で NOT NULL になります。 ID 列は DEFAULT 節を持つことができません (SQLSTATE 42623)。

START WITH numeric-constant
ID 列の最初の値を指定します。 この値は、この列に割り当て可能な任意の正または負の値にすることができます (SQLSTATE 42815)。ただし小数点の右側に非ゼロの数字があってはなりません (SQLSTATE 428FA)。デフォルトは、昇順シーケンスであれば MINVALUE、降順シーケンスであれば MAXVALUE です。この値は必ずしも、ID 列の最大値または最小値に達した後に循環先となる値とは限りません。 START WITH 節を使用して、循環に使用される範囲外の値の生成を開始することができます。 循環に使用される範囲は、MINVALUE および MAXVALUE によって定義されています。
INCREMENT BY numeric-constant
連続した ID 列値のインターバルを指定します。 この値は、この列に割り当て可能な任意の正または負の値にすることができます (SQLSTATE 42815)。これは長精度整数定数の値を超えず (SQLSTATE 42820)、小数点の右側に非ゼロの数字がない値にします (SQLSTATE 428FA)。

この値が負の場合、これは降順シーケンスです。 この値が 0 の場合、または正の場合は、昇順シーケンスになります。デフォルトは 1 です。

NO MINVALUE または MINVALUE
降順 ID 列が値の生成を循環または停止する最小値、あるいは昇順 ID 列が最大値に達した後に循環する最小値を指定し ます。
NO MINVALUE
昇順シーケンスの場合、値は START WITH 値、または START WITH が指定されなかった場合には 1 です。 降順シーケンスの場合、列のデータ・タイプの最小値になります。 これはデフォルトです。
MINVALUE numeric-constant
最小値にする数値定数を指定します。 この値は、この列に割り当て可能な任意の正または負の値にすることができます (SQLSTATE 42815)。ただし最大値以下の値で (SQLSTATE 42815)、小数点の右側に非ゼロの数字がない値にします (SQLSTATE 428FA)。
NO MAXVALUE または MAXVALUE
昇順 ID 列が値の生成を循環または停止する最大値、あるいは最小値に達した後に 降順 ID 列が循環する最大値を指定します。
NO MAXVALUE
昇順シーケンスの場合、値は列のデータ・タイプの最大値です。 降順シーケンスの場合、値は START WITH 値、または START WITH が指定されなかった場合には -1 です。これはデフォルトです。
MAXVALUE numeric-constant
最大値にする数値定数を指定します。 この値は、この列に割り当て可能な任意の正または負の値にすることができます (SQLSTATE 42815)。ただし最小値以上の値で、(SQLSTATE 42815)、小数点の右側に非ゼロの数字がない値にします (SQLSTATE 428FA)。
NO CYCLE または CYCLE
その最大値または最小値が生成された後、この ID 列が値の生成を続行するかどうかを指定します。
NO CYCLE
最大値または最小値に達した後、ID 列について値が生成されないことを指定します。 これはデフォルトです。
CYCLE
最大値または最小値に達した後、この列について値の生成が続行されることを指定します。 このオプションが使用されると、昇順 ID 列が最大値に達した後は、その最小値が生成されます。 降順 ID 列が最小値に達した後は、その最大値が生成されます。 ID 列の最大値および最小値は、循環に使用される範囲を決定します。

CYCLE が有効な場合、DB2 が ID 列について重複する値を生成する可能性があります。固有値が望ましい場合、明示的には要求されませんが、値の固有性を確保するために、1 列のユニーク索引を生成列で定義する必要があります。 このような ID 列にユニーク索引が存在し、固有ではない値が生成されると、エラーが起こります (SQLSTATE 23505)。

NO CACHE または CACHE
特定の事前割り振り値を、 高速アクセスできるようメモリーに保存するかどうかを指定します。 ID 列で新しい値が必要になった場合に、キャッシュの中のものを使用できないときは、 新しいキャッシュ・ブロックの末尾をログ記録する必要があります。 ただし、ID 列で新しい値が必要になった場合に、キャッシュの中に未使用の値があるときは、 その ID 値を割り振ったほうが、ロギングしなくて済むので高速化されます。 これはパフォーマンスおよびチューニング・オプションです。
NO CACHE
ID 列の値を事前割り振りしないことを指定します。

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

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

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

正常な理由またはシステム障害のためにデータベースが非アクティブになると、 コミットされたステートメントで使用されていないキャッシュ済みシーケンス値はすべて 失われます。つまり使用されなくなります。 データベースの活動解除が起きたら失われる可能性のある ID 列値の最大数は、 CACHE オプションに指定された値になります。 (データベースが ACTIVATE コマンドまたは API を使用して明示的にアクティブ化されない場合には、 最終アプリケーションの接続をデータベースから切断すると、暗黙の活動解除が行われます。)

最小値は 2 です (SQLSTATE 42815)。 デフォルト値は CACHE 20 です。

複数パーティション環境または DB2 pureScale® 環境で、複数の DB2 メンバーがシーケンス値を同時にキャッシュに入れられるようにするには、CACHE および NO ORDER オプションを使用します。

DB2 pureScale 環境では、CACHE と ORDER の両方が指定されている場合、ORDER の指定が CACHE の指定をオーバーライドして、NO CACHE が有効になります。

NO ORDER または ORDER
要求の順序で ID 値が生成されるかどうかを指定します。
NO ORDER
要求の順序で値を生成する必要がないことを指定します。 これはデフォルトです。
ORDER
要求の順序で値が生成されることを指定します。
FOR EACH ROW ON UPDATE AS ROW CHANGE TIMESTAMP
列が表のタイム・スタンプ列であることを指定します。挿入される各行、および任意の列が更新される各行に対して、その列の値が生成されます。 ROW CHANGE TIMESTAMP 列に生成される値は、その行の挿入または更新の時刻に対応するタイム・スタンプです。1 つのステートメントによって複数の行が挿入または更新される場合、ROW CHANGE TIMESTAMP 列の値は行ごとに異なる可能性があります。

ROW CHANGE TIMESTAMP 列は 1 つの表内に 1 つだけ含めることができます (SQLSTATE 428C1)。 data-type を指定する場合は、TIMESTAMP または TIMESTAMP(6) でなければなりません (SQLSTATE 42842)。ROW CHANGE TIMESTAMP 列は DEFAULT 節を持つことができません (SQLSTATE 42623)。 ROW CHANGE TIMESTAMP 列には NOT NULL を指定する必要があります (SQLSTATE 42831)。

AS (generation-expression)
列定義が式に基づくことを指定します。(GENERATED ALWAYS 列の式にユーザー定義の外部関数が入っている場合に、 その関数の実行可能ファイルを変更する (与えられた引数に対する結果が変わった場合など) と、 データの不整合を生じることがあります。これが生じないようにするには、SET INTEGRITY ステートメントを使って、 新しい値を強制的に生成させます。) generation-expression には、以下のいずれも入れることができません (SQLSTATE 42621)。
  • 副照会
  • XMLQUERY 式または XMLEXISTS 式
  • 列関数
  • 間接参照操作または DEREF 関数
  • 非 deterministic であるユーザー定義関数または組み込み関数
  • EXTERNAL ACTION オプションを使用するユーザー定義関数
  • NO SQL を指定して定義されていないユーザー定義関数
  • ホスト変数またはパラメーター・マーカー
  • 特殊レジスターおよび特殊レジスターの値に依存する組み込み関数
  • グローバル変数
  • 列リスト内で後から定義されている列の参照
  • 他の生成列の参照
  • タイプ XML の列の参照

列のデータ・タイプは generation-expression の結果データ・タイプに基づいています。 CAST 指定を使って特定のデータ・タイプを強制的に使用し、 有効範囲を設けることができます (参照タイプの場合のみ)。 data-type を指定すると、適切な割り当て規則に従って、値が列に割り当てられます。 NOT NULL 列オプションを使わない限り、生成列は暗黙で NULL 可能と見なされます。 生成列のデータ・タイプと generation-expression の結果データ・タイプは、等価のものとして定義されている必要があります (『割り当てと比較』を参照してください)。ただし、LOB データ・タイプ、XML、構造化タイプ、およびこれらのいずれかのタイプに基づいた特殊タイプの列と生成式を除きます (SQLSTATE 42962)。

AS ROW BEGIN

これを指定すると、行が表に挿入されるとき、または行のいずれかの列が更新されるときには常に、データベース・マネージャーによって生成値が割り当てられます。 この値は、トランザクションの中で、表に含まれる行開始列またはトランザクション開始 ID 列に値を割り当てる必要があるようなデータ変更ステートメント、またはシステム期間テンポラル表に含まれる行を削除するデータ変更ステートメントのいずれかを最初に実行している間に、時刻機構を読み取ることによって生成されます。

システム期間テンポラル表の場合、行開始列の値は、トランザクション全体にわたり固有になるようにデータベース・マネージャーによって生成されます。 関連した履歴表に挿入される行の終了タイム・スタンプ値が開始タイム・スタンプ値より大きくなるように、タイム・スタンプ値が調整される可能性があります。 これは、競合するトランザクションがシステム期間テンポラル表の同じ行を更新しているときに行われる場合があります。 このタイム・スタンプ値の調整を行うには、データベース構成パラメーター systime_period_adjYes に設定する必要があります。 単一の SQL トランザクション内で複数の行が挿入または更新され、調整が必要ではない場合、行開始列の値はすべての行において同じになり、別のトランザクションでその列のために生成された値とは異なる固有の値になります。 行開始列は期間 SYSTEM_TIME の開始列として必要になります。このタイプの生成列は、この使用目的で準備されています。

表に含めることができる行開始列は 1 つだけです (SQLSTATE 428C1)。 data-type が指定されない場合、 列は TIMESTAMP(12) として定義されます。data-type を指定する場合は、TIMESTAMP(12) でなければなりません (SQLSTATE 42842)。列は DEFAULT 節を持つことができず (SQLSTATE 42623)、また列は NOT NULL として定義される必要があります (SQLSTATE 42831)。行開始列は更新できません。

AS ROW END

これを指定すると、行が挿入されるとき、または行内のいずれかの列が更新されるときには常に、データベース・マネージャーによって列のデータ・タイプの値が割り当てられます。 割り当てられる値は TIMESTAMP の「9999-12-30-00.00.00.000000000000」です。

行終了列が期間 SYSTEM_TIME の 2 番目の列として必要になります。このタイプの生成列は、この使用目的で準備されています。

表に含めることができる行終了列は 1 つだけです (SQLSTATE 428C1)。 data-type が指定されない場合、 列は TIMESTAMP(12) として定義されます。data-type を指定する場合は、TIMESTAMP(12) でなければなりません (SQLSTATE 42842)。列は DEFAULT 節を持つことができず (SQLSTATE 42623)、また列は NOT NULL として定義される必要があります (SQLSTATE 42831)。行終了列は更新できません。

AS TRANSACTION START ID

これを指定すると、行が表に挿入されるとき、または行のいずれかの列が更新されるときには常に、データベース・マネージャーによって値が割り当てられます。 データベース・マネージャーは、トランザクションごとに固有のタイム・スタンプ値、または NULL 値を割り当てます。 トランザクション開始 ID 列が NULL 可能で、値を調整する必要がない行開始列が表にある場合には、その列に NULL 値が割り当てられます。 それ以外の場合、この値は、次のいずれかの場合に時刻機構を読み取ることによって生成されます。(1) トランザクションの中で、表に含まれる行開始列またはトランザクション開始 ID 列に値を割り当てる必要があるようなデータ変更ステートメントを最初に実行するとき。(2) システム期間テンポラル表に含まれる行を削除するとき。 単一の SQL トランザクション内で複数の行が挿入または更新される場合、トランザクション開始 ID 列の値はすべての行において同じになり、別のトランザクションでその列のために生成された値とは異なる固有の値になります。

トランザクション開始 ID 列がシステム期間テンポラル表に必要になります。このタイプの生成列は、この使用目的で準備されています。

表に含めることができるトランザクション開始 ID 列は 1 つだけです (SQLSTATE 428C1)。 data-type が指定されない場合、 列は TIMESTAMP(12) として定義されます。data-type を指定する場合は、TIMESTAMP(12) でなければなりません。トランザクション開始 ID 列は DEFAULT 節を持つことができません (SQLSTATE 42623)。 トランザクション開始 ID 列は更新できません。

INLINE LENGTH integer
このオプションは、構造化タイプ、XML データ・タイプ、または LOB データ・タイプを使って定義された列に対してだけ有効です (SQLSTATE 42842)。

データ・タイプ XML または LOB の列では、integer は、基本表の行に格納する XML 文書または LOB データの内部表記の最大バイト・サイズを指示します。これより大きな内部表記を持つ XML 文書は、基本表の行とは別に、補助ストレージ・オブジェクト内に格納されます。 これは自動的に行われます。 XML タイプの列には、デフォルト・インライン長はありません。 XML 文書または LOB データが基本表の行にインラインで保管される場合、追加のオーバーヘッドが生じます。LOB データの場合、オーバーヘッドは 4 バイトです。

データ・タイプ LOB の列の場合、この節が指定されていなければ、デフォルトのインライン長は LOB 記述子の最大サイズに設定されます。明示的 INLINE LENGTH は、少なくとも LOB 記述子の最大サイズが必要です。次の表は、LOB 記述子のサイズについて要約しています。
表 1. さまざまな LOB 長に対する LOB 記述子のサイズ
LOB の最大長 (バイト単位) 明示的 INLINE LENGTH の最小値
1,024 68
8,192 92
65,536 116
524,000 140
4,190,000 164
134,000,000 196
536,000,000 220
1,070,000,000 252
1,470,000,000 276
2,147,483,647 312
構造化タイプの列では、integer は、行内の残りの値とともにインラインで保管する構造化タイプのインスタンスの最大サイズをバイト単位で指示します。インラインで保管できない構造化タイプのインスタンスは、LOB 値が処理されるのに似た方法で、基本表の行とは別に保管されます。これは自動的に行われます。 構造化タイプ列のデフォルトの INLINE LENGTH は、 このタイプのインライン長になります (明示的に指定するか、 または CREATE TYPE ステートメント内のデフォルトとして)。 構造化タイプの INLINE LENGTH が 292 未満の場合、列の INLINE LENGTH には値 292 が使われます。
注: サブタイプのインライン長は、デフォルトのインライン長には数えられません。このことは、CREATE TABLE 時に明示的に INLINE LENGTH を指定して、 既存および将来のサブタイプに対処できるようにしておかないと、 サブタイプのインスタンスはインラインに適合しないことがあることを意味します。

明示的 INLINE LENGTH 値は、32 673 を超えてはなりません。構造化タイプまたは XML データ・タイプの場合、少なくとも 292 でなければなりません (SQLSTATE 54010)。

COMPRESS SYSTEM DEFAULT
システム・デフォルト値が、最小限のスペースを使用して保管されるように指定します。 VALUE COMPRESSION 節が指定されていない場合には警告が出され (SQLSTATE 01648)、 システム・デフォルト値が最小限のスペースを使用して保管されるようにはなりません。

システム・デフォルト値がこのような方法で保管されると、 列に対する挿入や更新操作の際に余分な検査が行われるために、 若干パフォーマンスが低下します。

基本データ・タイプは、DATE、TIME、TIMESTAMP、XML、または構造化データ・タイプであってはなりません (SQLSTATE 42842)。 基本データ・タイプが可変長ストリングの場合には、この節は無視されます。 表が VALUE COMPRESSION に設定されている場合は、長さ 0 のストリング値は自動的に圧縮されます。

COLUMN SECURED WITH security-label-name
表に関連するセキュリティー・ポリシーに対応して存在するセキュリティー・ラベルを識別します。 名前は非修飾でなければなりません (SQLSTATE 42601)。 表にはセキュリティー・ポリシーが関連付けられている必要があります (SQLSTATE 55064)。表はシステム期間テンポラル表であってはなりません。
period-definition
PERIOD
表の期間を定義します。
SYSTEM_TIME (begin-column-name, end-column-name)

システム期間を SYSTEM_TIME という名前で定義します。 表に SYSTEM_TIME という名前の列があってはなりません (SQLSTATE 42711)。 表に含めることができる SYSTEM_TIME 期間は 1 つだけです (SQLSTATE 42711)。 begin-column-name は ROW BEGIN として定義する必要があり、end-column-name は ROW END として定義する必要があります (SQLSTATE 428HN)。

BUSINESS_TIME (begin-column-name, end-column-name)

アプリケーション期間を BUSINESS_TIME という名前で定義します。 表に BUSINESS_TIME という名前の列があってはなりません (SQLSTATE 42711)。 表に含めることができる BUSINESS_TIME 期間は 1 つだけです (SQLSTATE 42711)。 begin-column-name および end-column-name は、両方とも DATE または TIMESTAMP(p) (p は 0 から 12) として定義する必要があり (SQLSTATE 42842)、列は NOT NULL として定義する必要があります (SQLSTATE 42831)。 begin-column-name および end-column-name は、GENERATED 節で定義された列を指定することはできません (SQLSTATE 428HZ)。

end-column-name の値が begin-column-name の値より大きくなるように、暗黙的なチェック制約が生成されます。 暗黙的に作成されるチェック制約の名前は DB2_GENERATED_CHECK_CONSTRAINT_FOR_BUSINESS_TIME で、ステートメントで指定された他のチェック制約の名前にすることはできません (SQLSTATE 42710)。

unique-constraint
ユニーク制約または主キー制約を定義します。 表に分散キーがある場合、 ユニーク・キーまたは主キーは分散キーのスーパーセットである必要があります。 副表である表では、 ユニーク制約または主キー制約を指定することはできません (SQLSTATE 429B3)。 主キーまたはユニーク・キーは、ディメンションのサブセットにはなりません (SQLSTATE 429BE)。 表がルート表である場合、表とそのすべての副表に対して制約が適用されます。
CONSTRAINT constraint-name
主キー制約、またはユニーク制約の名前を指定します。
UNIQUE (column-name,...)
指定した列で構成されるユニーク・キーを定義します。 指定する列は NOT NULL として定義されていなければなりません。 各 column-name (列名) は、表の列を指定するものでなければなりません。 また、同じ列を複数回指定することはできません。
表に期間 BUSINESS_TIME が定義されている場合、BUSINESS_TIME WITHOUT OVERLAPS は、キー式リストの最後の項目として指定できます。 BUSINESS_TIME WITHOUT OVERLAPS を指定する場合、リストには column-name が少なくとも 1 つは含まれていなければなりません。 WITHOUT OVERLAPS は、その他の指定キーの値が、期間 BUSINESS_TIME の時間においてユニークになることを示します。 BUSINESS_TIME WITHOUT OVERLAPS を指定すると、期間 BUSINESS_TIME の列を制約の一部として指定することはできません (SQLSTATE 428HW)。BUSINESS_TIME WITHOUT OVERLAPS を指定すると、以下の属性が制約に追加されます。
  • BUSINESS_TIME 期間の終了列 (昇順)
  • BUSINESS_TIME 期間の開始列 (昇順)

指定する列の数は 64 を超えてはならず、 その保管時の長さ合計は、ページ・サイズに対応する索引キー長制限値を超えてはなりません。 列の保管時の長さについては、バイト・カウントを参照してください。キー長の制限については、『SQL の制限』を参照してください。 列の長さ属性がページ・サイズに対応する索引キー長制限値の範囲内に収まる場合でも、LOB、XML、これらのタイプのいずれかに基づく特殊タイプ、構造化タイプは、ユニーク・キーの一部として使用できません (SQLSTATE 54008)。

ユニーク・キーの列セットは、主キーまたは他のユニーク・キーの列セットと同じにすることはできません (SQLSTATE 01543)。 (LANGLEVEL が SQL92E または MIA の場合は、エラーが戻されます。SQLSTATE 42891)

表が副表である場合、ユニーク制約はスーパー表から継承されるので、ユニーク制約を指定することはできません (SQLSTATE 429B3)。

カタログに記録されている表の記述には、ユニーク・キーとそのユニーク索引が含まれます。 順方向と逆方向のスキャンが可能な双方向のユニーク索引は、それぞれの列について昇順に指定された順序で、列に対して自動的に作成されます。 索引の名前は、作成している表が属しているスキーマに存在する既存の索引と競合しない場合、 constraint-name (制約名) と同じになります。 索引名が競合する場合は、 名前は SQL の後に文字のタイム・スタンプ (yymmddhhmmssxxx) が続き、 スキーマ名として SYSIBM を伴う名前になります。

PRIMARY KEY (column-name,...)
指定された列で構成される主キーを定義します。 この節を複数回指定することはできず、 指定する列は NOT NULL として定義されていなければなりません。 各 column-name (列名) は、表の列を指定していなければなりません。 また、同じ列を複数回指定することはできません。
表に期間 BUSINESS_TIME が定義されている場合、BUSINESS_TIME WITHOUT OVERLAPS は、キー式リストの最後の項目として指定できます。 BUSINESS_TIME WITHOUT OVERLAPS を指定する場合、リストには column-name が少なくとも 1 つは含まれていなければなりません。 WITHOUT OVERLAPS は、残りの指定キーの値が、期間 BUSINESS_TIME の時間においてユニークになることを示します。 BUSINESS_TIME WITHOUT OVERLAPS を指定すると、期間 BUSINESS_TIME の列を制約の一部として指定することはできません (SQLSTATE 428HW)。BUSINESS_TIME WITHOUT OVERLAPS を指定すると、以下の属性が制約に追加されます。
  • BUSINESS_TIME 期間の終了列 (昇順)
  • BUSINESS_TIME 期間の開始列 (昇順)

指定する列の数は 64 を超えてはならず、 その保管時の長さ合計は、ページ・サイズに対応する索引キー長制限値を超えてはなりません。 列の保管時の長さについては、バイト・カウントを参照してください。キー長の制限については、『SQL の制限』を参照してください。 列の長さ属性がページ・サイズに対応する索引キー長制限値の範囲内に収まる場合でも、LOB、XML、これらのタイプのいずれかに基づく特殊タイプ、構造化タイプは、主キーの一部として使用できません (SQLSTATE 54008)。

主キーの列セットは、ユニーク・キーの列セットと同じであってはなりません (SQLSTATE 01543)。 (LANGLEVEL が SQL92E または MIA の場合は、エラーが戻されます。SQLSTATE 42891)

1 つの表には、主キーを 1 つだけ定義することができます。

表が副表である場合、主キーはスーパー表から継承されるので、 主キーを指定することはできません (SQLSTATE 429B3)。

カタログに記録されている表の記述には、主キーとその主索引が含まれます。 順方向と逆方向のスキャンが可能な双方向のユニーク索引は、それぞれの列について昇順に指定された順序で、列に対して自動的に作成されます。 索引の名前は、作成している表が属しているスキーマに存在する既存の索引と競合しない場合、 constraint-name (制約名) と同じになります。 索引名が競合する場合は、 名前は SQL の後に文字のタイム・スタンプ (yymmddhhmmssxxx) が続き、 スキーマ名として SYSIBM を伴う名前になります。

表に分散キーがある場合、 unique-constraint (ユニーク制約) の列は分散キー 列のスーパーセットである必要があります。 列の順序は重要ではありません。

referential-constraint
参照制約を定義します。
CONSTRAINT constraint-name
参照制約の名前を指定します。
FOREIGN KEY (column-name,...)
指定した constraint-name (制約名) の参照制約を定義します。

T1 を、ステートメントの対象となる表であると想定します。 参照制約の外部キーは、指定された列で構成されます。 列名リストの各名前は、T1 の列を指定していなければならず、 同じ列を複数回指定することはできません。

指定する列の数は 64 を超えてはならず、 その保管時の長さ合計は、ページ・サイズに対応する索引キー長制限値を超えてはなりません。 列の保管時の長さについては、バイト・カウントを参照してください。キー長の制限については、『SQL の制限』を参照してください。 LOB、XML、これらのタイプのうちのいずれかに基づく特殊タイプ、または構造化タイプの列を、外部キーの一部として使用することはできません (SQLSTATE 42962)。外部キーの列の数は、親キーの列の数と同じでなければならず、 対応する列のデータ・タイプは互換性があることが必要です (SQLSTATE 42830)。 2 つの列の記述は、それらの列が互換性のあるデータ・タイプ (両方の列が数字、 文字ストリング、GRAPHIC、日付 / 時間であるか、 または同じ特殊タイプ) であれば互換性があります。

references-clause
参照制約の親表または親ニックネーム、および親キーを指定します。
REFERENCES table-name または nickname
REFERENCE 節に指定される表またはニックネームは、 カタログに記述された基本表またはニックネームを識別している必要がありますが、 カタログ表を示すものであってはなりません。

参照制約の外部キー、親キー、および親表または親ニックネームが、 以前に指定した参照制約の外部キー、親キー、および親表または親ニックネームと同じである場合、 参照制約は重複しています。 重複した参照制約は無視され、警告が戻されます (SQLSTATE 01543)。

以下の説明では、T2 は指定した親表を示し、T1 は作成する (または変更する) 表を示します。 (T1 と T2 は同じ表である可能性もあります。)

指定された外部キーの列の数は、T2 の親キーと同じ数でなければなりません。 また、外部キーの n 番目の列の記述は、 その親キーの n 番目の列の記述と互換性がなければなりません。 この規則において、日時の列はストリング列と互換性があるとは見なされません。
(column-name,...)
参照制約の親キーは、指定された列で構成されます。 各 column-name は、T2 の列を指定する非修飾名でなければなりません。 同じ列を複数回指定することはできません。

列名のリストは、 主キーまたは T2 に存在するユニーク制約の列セットと一致している (順序は任意) 必要があります (SQLSTATE 42890)。 列名のリストの指定がない場合、T2 に主キーがある必要があります (SQLSTATE 42888)。 列名リストを省略すると、指定されているとおりの順序でその主キーの列が暗黙に指定されます。

FOREIGN KEY 節で指定される参照制約は、 T2 が親であり、T1 が従属であるリレーションシップを定義します。

rule-clause
従属表に対するアクションを指定します。
ON DELETE
親表の行が削除された場合、従属表でどのようなアクションを行うかを指定します。 次の 4 つのアクションがあります。
  • NO ACTION (デフォルト値)
  • RESTRICT
  • CASCADE
  • SET NULL
削除規則は、T2 の行が DELETE または伝搬による削除操作の対象であり、 その行の従属行が T1 にある場合に、適用されます。 p は、T2 のそのような行を表すと想定します。
  • RESTRICT または NO ACTION を指定すると、エラーになり、行は削除されません。
  • CASCADE を指定すると、 T1 の p の従属行に削除操作が伝搬します。
  • SET NULL が指定された場合、 T1 にある、p の各従属行の外部キーで、NULL 可能な列が NULL 値に設定されます。

SET NULL は、外部キーの列に NULL 可能な列がない限り指定してはなりません。 この節を省略すると、暗黙に ON DELETE NO ACTION が指定されます。

T1 が複数のパスで T2 に連結削除されている場合は、 重複する外部キー定義を使用して 2 つの SET NULL 規則を定義することはできません。 例えば、T1 (i1, i2, i3) という場合、 Rule1 に外部キー (i1, i2) を使用し、Rule2 に外部キー (i2, i3) を使用するということはできません。

規則の適用順序は次のとおりです。
  1. RESTRICT
  2. SET NULL または CASCADE
  3. NO ACTION

T1 の任意の行が 2 つの異なる規則によって影響される場合、エラーとなり行は削除されません。

複数の表が関係し、 削除規則の 1 つが RESTRICT または SET NULL になっている循環によって表が自身を連結削除するような参照制約は定義できません (SQLSTATE 42915)。

複数のパスによって表が自身や他の表を連結削除する参照制約は、 以下の場合を除き、定義できます (SQLSTATE 42915)。

  • 表は、CASCADE リレーションシップ (自己参照、または別の表を参照)、 および削除規則が RESTRICT または SET NULL の自己参照リレーションシップのいずれの従属表であってもなりません。
  • あるキーに含まれる列のうち少なくとも 1 つが他のキーに含まれ、他のキーとオーバーラップしているキーがある場合。 表が、外部キーがオーバーラップする複数のリレーションシップを通して別の表に連結削除される場合は、 それらのリレーションシップの間で削除規則が一致していなければなりません。 また、いずれの削除規則も SET NULL になっていてはなりません。
  • 表と別の表の間に複数のリレーションシップに基づく連結削除が設定されており、それらのリレーションシップのうち、少なくとも 1 つに SET NULL の削除規則が指定されている場合、それらのリレーションシップの外部キー定義に分散キー列またはマルチディメンション・クラスタリング (MDC) キー列が含まれていてはなりません。
  • CASCADE リレーションシップを通して 2 つの表が同じ表に連結削除されている場合、 各連結削除パスの最後のリレーションシップの削除規則が RESTRICT または SET NULL であるときは、 2 つの表を相互に連結削除することはできません。

T1 の何らかの行が別の削除規則の影響を受ける場合、 結果は、これらの規則で指定されたすべてのアクションの影響を受けます。 すべてのアクションの影響は、T1 の AFTER トリガーと CHECK 制約からも認識されます。 例えば、上位の表へのある連結削除パスによって NULL 設定されるターゲットになっていて、 同じ上位の表への 2 番目の連結削除パスによって削除されるターゲットになっている行があるとします。 この場合、結果として行は削除されます。 この派生表では、AFTER DELETE トリガーはアクティブ化されますが、 AFTER UPDATE トリガーはアクティブ化されません。

親表または従属表が型付き表階層のメンバーである参照制約に対して、上記の規則を適用する場合、各階層内のすべて の表に対して適用されるすべての参照制約が考慮に入れられます。

ON UPDATE
親表の行が更新された場合に従属表に対して行うアクションを指定します。 この節はオプションです。 ON UPDATE NO ACTION はデフォルト値であり、 ON UPDATE RESTRICT はそれに代わって指定できる唯一のものです。

NO ACTION と RESTRICT の差異については、『注』のセクションを参照してください。

check-constraint
チェック制約を定義します。 check-constraint (チェック制約) は、 偽以外に評価されなければならない search-condition (検索条件)または列間に定義された機能従属関係です。
CONSTRAINT constraint-name
チェック制約の名前を指定します。
CHECK (check-condition)
チェック制約を定義します。 search-condition は、表のすべての行について、真または不明でなければなりません。
search-condition
search-condition には、以下の制限があります。
  • 列参照は、作成する表の列に対するものでなければなりません。
  • search-condition に TYPE 述部を入れることはできません。
  • search-condition には、以下のいずれも入れることができません (SQLSTATE 42621)。
    • 副照会
    • XMLQUERY 式または XMLEXISTS 式
    • 有効範囲を持つ参照引数がオブジェクト ID (OID) 列以外の列である、間接参照操作または DEREF 関数
    • SCOPE 節を持つ CAST 指定
    • 列関数
    • deterministic 関数でない関数
    • 外部アクションを持つと定義された関数
    • MODIFIES SQL または READS SQL DATA のいずれかによって定義されたユーザー定義関数
    • ホスト変数
    • パラメーター・マーカー
    • sequence-references
    • OLAP 仕様
    • 特殊レジスターおよび特殊レジスターの値に依存する組み込み関数
    • グローバル変数
    • ID 列以外の生成列の参照
    • タイプ XML の列の参照 (VALIDATED 述部の中以外)
    • エラー・トレラントな nested-table-expression
functional-dependency
列間の機能従属関係を定義します。
column-name DETERMINED BY column-name or (column-name,...) DETERMINED BY (column-name,...)
列の親セットには、DETERMINED BY 節の直前に来る指定された列が含まれます。 列の子セットには、DETERMINED BY 節の直後に来る指定された列が含まれます。 search-condition の制約事項すべては、親セット列と子セット列に適用され、 列のセットには単純な列参照のみが許可されています (SQLSTATE 42621)。 機能従属関係に同じ列を複数回指定することはできません (SQLSTATE 42709)。 列のデータ・タイプを LOB データ・タイプ、LOB データ・タイプに基づく特殊タイプ、XML データ・タイプ、構造化タイプにすることはできません (SQLSTATE 42962)。 ROW CHANGE TIMESTAMP 列を主キーの一部として使用することはできません (SQLSTATE 429BV)。 列の子セットの列を NULL 可能列にすることはできません (SQLSTATE 42621)。

column-definition の一部としてチェック制約を指定する場合、 その同じ列に対してのみ列参照を行うことができます。 表定義の一部として指定されたチェック制約には、 それ以前に CREATE TABLE ステートメントで定義されている列を指定する列参照を含めることができます。 チェック制約の矛盾、重複条件、または同等条件については検査されません。 したがって、矛盾したチェック制約や冗長なチェック制約が定義可能であるため、 実行時にエラーになる可能性があります。

search-condition として IS NOT NULL を指定することもできますが、列の NOT NULL 属性を使用することによって直接的に NULL 可能を指定することをお勧めします。例えば、salary が NULL に設定された場合に、 CHECK (salary + bonus > 30000) は受け入れられます。 これは、CHECK 制約は満たされるか未知かのどちらかでなければならず、 この場合 salary は未知であるためです。 一方、salary が NULL に設定される場合に、 CHECK (salary IS NOT NULL) は偽となり、制約違反と見なされます。

search-condition を伴うチェック制約は、 表に対して行の挿入または更新が行われる時点で適用されます。 表で定義されるチェック制約は、その表の副表すべてに自動的に適用されます。

挿入、更新、削除、整合性設定などの通常の操作中には、 データベース・マネージャーによって機能従属関係が課せられません。 機能従属関係は、照会の最適化のための照会再書き込みで使用される場合があります。 機能従属関係の整合性が維持されないと、間違った結果が戻される可能性があります。

constraint-attributes
参照整合性またはチェック制約に関連付けられた属性を定義します。
ENFORCED または NOT ENFORCED
挿入、更新、削除などの通常の操作中に、 データベース・マネージャーによって制約が課せられるかどうかを指定します。 デフォルトは ENFORCED です。
ENFORCED
データベース・マネージャーによって制約が課せられます。 機能従属関係に ENFORCED を指定することはできません (SQLSTATE 42621)。 ENFORCED は、参照制約がニックネームを参照しているときは指定できません (SQLSTATE 428G7)。
NOT ENFORCED
データベース・マネージャーによって制約が課せられません。
TRUSTED
データは、制約に適合しているものとして信頼できます。 TRUSTED は、表のデータが個別に制約に適合していることが分かっている場合のみに使用してください。データが実際には制約に適合していない場合、照会結果が予測不能になる可能性があります。これはデフォルト・オプションです。
インフォメーショナル制約は、どのような場合でも違反すべきではありません。 インフォメーショナル制約は、照会の最適化において、および REFRESH IMMEDIATE MQT とステージング表の増分処理において使用されます。 制約に違反している場合、これらの処理によって予測不能な結果が生成されたり、正しくない MQT およびステージング表の内容が生成されたりすることがあります。例えば、親子関係にある表が保守される順序は重要です。 親子関係にある表に行を挿入する場合、まず最初に親表に行を挿入する必要があります。 親子関係にある表から行を削除するには、まず最初に子表から行を削除する必要があります。 これにより、どのような場合でも子表に孤立した行が存在しないようにすることができます。 インフォメーショナル制約に違反している場合、従属 MQT データとステージング表データの増分保守は、その違反しているインフォメーショナル制約に基づいて最適化される可能性があり、正しくないデータが生成されることがあります。
NOT TRUSTED
データは、制約に適合しているものとして信頼することはできません。 NOT TRUSTED の使用目的としては、データがほとんどの行では制約に適合しているものの、すべての行または将来追加される行が制約に適合することは個別には認識されない場合のためのものです。 制約が NOT TRUSTED で、照会最適化においてこれが有効になっている場合、その制約に完全に適合するデータに依存するような最適化は実行されません。 NOT TRUSTED は、参照整合性制約のみにしか指定できません (SQLSTATE 42613)。
ENABLE QUERY OPTIMIZATION または DISABLE QUERY OPTIMIZATION
適切な状況下で、照会の最適化のために、 制約または機能従属関係を使用できるかどうかを指定します。 デフォルトは ENABLE QUERY OPTIMIZATION です。
ENABLE QUERY OPTIMIZATION
制約が真であると想定され、照会の最適化に使用できます。
DISABLE QUERY OPTIMIZATION
制約を照会の最適化に使用できません。
OF type-name1
表の列が type-name1 で指定される構造化タイプの属性に基づいていることを指定します。 type-name1 の指定にスキーマ名が含まれていない場合、 そのタイプ名は SQL パス上のスキーマを探索することによって決まります (このパスは、 静的 SQL の場合は FUNCPATH プリプロセス・オプションによって、 動的 SQL の場合は CURRENT PATH レジスターによって定義されます)。 このタイプ名は、既存のユーザー定義タイプ名である (SQLSTATE 42704) 必要があり、 また、少なくとも 1 つの属性があって (SQLSTATE 42997)、 しかもインスタンス化可能な構造化タイプでなければなりません (SQLSTATE 428DP)。

UNDER が指定されていない場合には、 オブジェクト ID 列を指定する必要があります (OID-column-definition を参照)。 このオブジェクト ID 列は、その表の最初の列になります。 オブジェクト ID 列の後に、type-name1 の属性に基づく列が続きます。

HIERARCHY hierarchy-name
表階層に関連する階層表の名前を指定します。 これは、階層のルート表と同時に作成されます。 型付き表階層に含まれる副表すべてのデータは、この階層表に保管されます。 階層表を SQL ステートメントで直接に参照することはできません。 hierarchy-nametable-name になります。 暗黙または明示のスキーマ名の入った hierarchy-name は、 カタログに記述されている表、ニックネーム、ビュー、または別名を指定するものであってはなりません。 スキーマ名を指定する場合、 作成する表のスキーマ名と同じにする必要があります (SQLSTATE 428DQ)。 ルート表の定義時にこの節が省略されると、システムによって名前が生成されます。 この名前は、作成する表の名前とその後のユニークな接尾部で構成され、既存の表、ビュー、およびニックネームの ID の中で固有な ID です。
UNDER supertable-name
表が supertable-name の副表であることを指定します。 スーパー表は既存の表でなければならず (SQLSTATE 42704)、 かつ表は type-name1 のすぐ上のスーパータイプである構造化タイプを使用して 定義しなければなりません (SQLSTATE 428DB)。 table-namesupertable-name のスキーマ名は、 同じでなければなりません (SQLSTATE 428DQ)。 supertable-name で指定される表には、 type-name1 で既に定義された既存の副表を含めることはできません (SQLSTATE 42742)。

表の列には、スーパー表のオブジェクト ID 列が含まれています。 この列のタイプは、REF(type-name1) に変更されており、 type-name1 の属性に基づく列が続きます (ここでいうタイプには、 スーパータイプの属性も含まれていることを念頭に置いてください)。 属性名は OID 列名と同じものにすることはできません (SQLSTATE 42711)。

表スペースやデータ・キャプチャーなど、その他の表オプションは、初期状態ではログに記録されません。また、分散キー・オプションは指定できません。 これらのオプションはスーパー表から継承されます (SQLSTATE 42613)。

INHERIT SELECT PRIVILEGES
スーパー表に対して SELECT 特権を保持するユーザーやグループはすべて、 新しく作成した副表に対しても同様の特権を付与されます。 この特権は、副表定義者によって付与されたものと見なされます。
typed-element-list
型付き表の追加エレメントを定義します。 これには、列の追加オプション、オブジェクト ID 列 (ルート表のみ) の追加、 表の制約事項などが含まれます。
OID-column-definition
型付き表のオブジェクト ID 列を定義します。
REF IS OID-column-name USER GENERATED
オブジェクト ID 列 (OID) を表の最初の列として定義することを指定します。 表階層のルート表では、OID が必須です (SQLSTATE 428DX)。 この表は副表以外の型付き表 (OF 節が必須) でなければなりません (SQLSTATE 42613)。 この列の名前は OID-column-name として定義されますが、 構造化タイプ type-name1 のどの属性の名前とも同一にすることはできません (SQLSTATE 42711)。 さらに、この列はタイプ REF (type-name1), NOT NULL で定義され、 システム必須のユニーク索引 (デフォルトの索引名) が生成されます。 この列はオブジェクト ID 列 または OID 列 として参照されます。 USER GENERATED というキーワードは、 行を挿入する際にユーザーが OID 列の初期値を提供しなければならないことを指しています。 行を挿入した後は、OID 列を更新することはできません (SQLSTATE 42808)。
with-options
型付き表の列に適用される追加オプションを定義します。
column-name
追加オプションを指定する列の名前を指定します。 column-name (列名) は、 スーパー表の列ではない表の列の名前に対応していなければなりません (SQLSTATE 428DJ)。 列名は、ステートメント内の 1 つの WITH OPTIONS 節に 1 回だけしか指定できません (SQLSTATE 42613)。

タイプ定義 (CREATE TYPE) の一部としてオプションが既に指定されている場合には、 ここで指定されているオプションは CREATE TYPE のオプションをオーバーライドします。

WITH OPTIONS column-options
指定した列にオプションを定義します。 前述の column-options を参照してください。 表が副表である場合、主キーまたはユニーク制約を指定することはできません (SQLSTATE 429B3)。
LIKE table-name1 または view-name または nickname
表の列の名前と記述が、指定された表 (table-name1)、ビュー (view-name)、 またはニックネーム (nickname) の列とまったく同じであることを指定します。 LIKE の後に指定する名前は、カタログに存在する表、ビューまたはニックネーム、 あるいは宣言済み一時表を識別するものでなければなりません。 型付き表または型付きビューを指定することはできません (SQLSTATE 428EC)。
LIKE を使用すると、n 列が暗黙的に定義されます。n は、 指定した表、ビューまたはニックネームにおける列数です (指定した表では暗黙的な隠し列を含む)既存の表の暗黙的な隠し列に対応する新規表の列も、暗黙的な隠し列と定義されます。暗黙的な定義は、以下に示すように LIKE の後に何が特定されるかによって左右されます。
  • 表が特定されると、暗黙的な定義には table-name1 のそれぞれの列の列名、データ・タイプ、隠し属性、および NULL 可能特性が入ります。 EXCLUDING COLUMN DEFAULTS を指定しないと、列のデフォルト値も入ります。
  • ビューが特定されると、 暗黙的な定義には view-name に指定した全選択のそれぞれの結果列の列名、 データ・タイプ、および NULL 可能特性が入ります。ビュー列のデータ・タイプは、表の列に対して有効なデータ・タイプである必要があります。
  • ニックネームが特定されると、暗黙的な定義には nickname のそれぞれの列の列名、 データ・タイプ、および NULL 可能特性が入ります。
  • LIKE 節に保護対象表を指定すると、新しい表は、その指定した表と同じセキュリティー・ポリシーと保護対象列を継承します。
  • 表が LIKE 節内で指定されていて、その表に行開始列、行終了列、またはトランザクション開始 ID 列が含まれている場合、新しい表の対応する列はソース列のデータ・タイプのみを継承します。 新規列は生成列とは見なされません。
  • 期間が含まれる表が LIKE 節で指定されると、新しい表は期間定義を継承しません。
  • システム期間テンポラル表が LIKE 節で指定される場合、新しい表はシステム期間テンポラル表ではありません。

copy-attributes 節に基づいて、列のデフォルトと ID 列属性を組み込んだり除外したりすることができます。 さらにこの暗黙的な定義には、指定した表、ビュー、 またはニックネームの他の属性は含まれません。 したがって、新しい表には、ユニーク制約、外部キー制約、トリガー、索引、ORGANIZE BY 指定、PARTITIONING KEY 指定はいずれもありません。 表は IN 節で暗黙的にまたは明示的に指定した表スペースの中に作成されます。 また、任意指定の他の節を指定した場合に限り、この表にその任意指定の節が含まれます。

表が LIKE 節内で定義されていて、その表に ROW CHANGE TIMESTAMP 列が含まれている場合、新規表の対応する列は ROW CHANGE TIMESTAMP 列のデータ・タイプのみを継承します。新規列は生成列とは見なされません。

table-name-1 において行レベルまたは列レベルのアクセス制御がアクティブになると、これは新しい表で継承されません。

copy-options
これらのオプションは、 ソース結果表の定義 (表、ビュー、または全選択) の追加属性をコピーするかどうかを指定します。
INCLUDING COLUMN DEFAULTS
ソース結果表の定義の更新可能な各列の列デフォルトをコピーします。 更新可能でない列では、作成される表の対応列にデフォルトが定義されないことになります。

LIKE table-name が指定され、 しかも table-name が基本表、作成済み一時表、または宣言済み一時表を示す場合、 INCLUDING COLUMN DEFAULTS がデフォルトになります。 LIKE table-name が指定され、しかも table-name がニックネームを示す場合、INCLUDING COLUMN DEFAULTS は無効で、列のデフォルトはコピーされません。

EXCLUDING COLUMN DEFAULTS
ソース結果表の定義から列デフォルトはコピーされません。

この節がデフォルトです。ただし、LIKE table-name が指定され、 かつ table-name が基本表、作成済み一時表、または宣言済み一時表を示す場合を除きます。

INCLUDING IDENTITY COLUMN ATTRIBUTES
可能であれば、ソース結果表の定義から ID 列属性がコピーされます。 ID 列属性をコピーできるのは、表、ビュー、または全選択内の対応する列のエレメントが、 識別特性を持つ基本表列名に直接または間接にマップされる表列の名前またはビュー列の名前である場合です。 これら以外の場合はすべて、新規表の列には識別特性は備わりません。 以下に例を示します。
  • 全選択の選択リストに、ID 列名の複数のインスタンスが入っている場合 (つまり、 同一列の複数回の選択の場合)
  • 全選択の選択リストに複数の ID 列が含まれている (つまり、結合が関与している) 場合
  • ID 列が選択リスト内の式に組み込まれている場合
  • 全選択にセット演算 (UNION (合併)、EXCEPT (差)、または INTERSECT (論理積)) が含まれている場合
EXCLUDING IDENTITY COLUMN ATTRIBUTES
ソース結果表の定義から ID 列属性はコピーされません。
as-result-table
column-name
表の列の名前を指定します。 列名のリストを指定する場合、リスト中の列の名前の数は、 fullselect の結果表の列の数と同じ数でなければなりません。 各 column-name (列名) は、固有、しかも非修飾でなければなりません。 列名のリストの指定がない場合、表の列は、fullselect の結果表の列名を継承します。

全選択の結果表に、無名列の重複列名がある場合には、 列名のリストを指定する必要があります (SQLSTATE 42908)。 無名列とは、定数、関数、式、またはセット演算から派生した列で、 選択リストの AS 節によって名前が指定されていない列を指します。

AS
表の定義に使用され、照会をこの後に指定します。
fullselect
表の基礎となる照会を定義します。 作成される列定義は、同じ照会で定義したビューの定義と同じになります。 fullselect で参照される基本表の暗黙的な隠し列に対応する新規表の列は、新規表では隠し列とは見なされません。

各選択リスト・エレメントには名前が必要です (式には AS 節を使用します)。 as-result-table は、表の属性を定義します。 結果列のデータ・タイプは、表の列に対して有効なデータ・タイプである必要があります。

fullselectdata-change-table-reference 節を組み込むことはできません (SQLSTATE 428FL)。

型付き表または型付きビューを参照しない有効な fullselect を指定することができます。

fullselect で指定した表で行レベルまたは列レベルのアクセス制御がアクティブになると、これは新しい表にはカスケードされません。

WITH NO DATA
照会は、表を定義するときにだけ使われます。 照会の結果を使用して表にデータが追加されることはありません。

表の列は、fullselect の結果である列の定義に基づいて定義されます。 fullselect によって FROM 節の 1 つの表が参照される場合、 その表の列である選択リスト項目は、参照される表の列名、 データ・タイプ、そして NULL 可能特性を使って定義されます。

materialized-query-definition
column-name
表の列の名前を指定します。 列名のリストを指定する場合、リスト中の列の名前の数は、 全選択の結果表の列の数と同じ数でなければなりません。 各 column-name (列名) は、固有、しかも非修飾でなければなりません。 列名のリストの指定がない場合、表の列は、全選択の結果表の列名を継承します。

fullselect の結果表に、無名列の重複列名がある場合には、 列名のリストを指定する必要があります (SQLSTATE 42908)。 無名列とは、定数、関数、式、またはセット演算から派生した列で、 選択リストの AS 節によって名前が指定されていない列を指します。

AS
表の定義に使用され、表に含まれるデータを判別する照会をこの後に指定します。
fullselect
表の基礎となる照会を定義します。 作成される列定義は、同じ照会で定義したビューの定義と同じになります。 全選択で参照される基本表の暗黙的な隠し列に対応する新規表の列は、新規表では隠し列とは見なされません。

各選択リスト・エレメントには名前が必要です (式には AS 節を使用します)。 materialized-query-definition は、マテリアライズ照会表の属性を定義します。 選択されたオプションは、後述するように全選択の内容も定義します。

全選択に data-change-table-reference 節を組み込むことはできません (SQLSTATE 428FL)。

REFRESH DEFERRED または REFRESH IMMEDIATE が指定されていると、 全選択で次のものを指定できません (SQLSTATE 428EC)。
  • 任意の FROM 節での、マテリアライズ照会表、作成済み一時表、宣言済み一時表、または型付き表への参照
  • ビューの全選択が、マテリアライズ照会表の全選択に関してリストされたいずれかの制限に違反する場合の、 そのビューへの参照
  • 参照タイプ (またはそのタイプに基づく特殊タイプ) である式
  • 次のいずれかの属性を持つ関数:
    • EXTERNAL ACTION
    • LANGUAGE SQL
    • CONTAINS SQL
    • READS SQL DATA
    • MODIFIES SQL DATA
  • NOT SECURED 関数 (NOT SECURED 関数がマテリアライズ照会表を参照し、 そのマテリアライズ照会表が、行または列のアクセス制御がアクティブな表を参照する場合)。
  • 物理的特性に依存する関数 (例えば、DBPARTITIONNUM、HASHEDVALUE、RID_BIT、RID)
  • ROW CHANGE 式または行の ROW CHANGE TIMESTAMP 列の参照
  • システム・オブジェクトに対する表またはビュー参照 (Explain 表も指定できません)
  • 構造化タイプ、LOB タイプ (または LOB タイプに基づく特殊タイプ)、または XML タイプである式
  • 保護対象表または保護対象ニックネームの参照
DISTRIBUTE BY REPLICATION を指定する場合、以下の制限が適用されます。
  • GROUP BY 節は許可されていません。
  • マテリアライズ照会表は単一の表だけを参照できます。 すなわち、結合を組み込むことはできません。
REFRESH IMMEDIATE は、以下の場合に指定されます。
  • 照会は副選択でなければなりません。 ただし、例外として、UNION ALL は GROUP BY の入力表式においてサポートされます。
  • 照会は再帰的であってはなりません。
  • 照会に以下のものを含めることはできません。
    • ニックネームへの参照
    • deterministic 関数でない関数
    • スカラー全選択
    • 全選択を持つ述部
    • 特殊レジスターおよび特殊レジスターの値に依存する組み込み関数
    • グローバル変数
    • SELECT DISTINCT
    • エラー・トレラントな nested-table-expression
  • FROM 節で複数の表またはビューを参照している場合、 明示的な INNER JOIN 構文を使わずに内部結合を 1 つだけ定義できます。
  • GROUP BY 節を指定する場合、以下の考慮事項が当てはまります。
    • サポートされている列関数は SUM、COUNT、COUNT_BIG、 および GROUPING (DISTINCT は指定しない)。 選択リストには COUNT(*) または COUNT_BIG(*) 列が含まれていなければなりません。 マテリアライズ照会表の選択リストに SUM(X) (X は NULL 可能な引数) を含める場合は、マテリアライズ照会表の選択リストに COUNT(X) も含める必要があります。 これらの列関数は、式の一部とすることはできません。
    • HAVING 節は許可されていません。
    • 複数パーティションのデータベース・パーティション・グループ内の場合、 分散キーは GROUP BY 項目のサブセットでなければなりません。
  • マテリアライズ照会表には重複した行があってはならず、 GROUP BY 節が指定されているかどうかによって、 この固有性要件に特有の、以下の制限が適用されます。
    • GROUP BY 節を指定する場合、以下の固有性に関連した制限が当てはまります。
      • すべての GROUP BY 項目が選択リストに含まれていること。
      • GROUP BY に GROUPING SETS、CUBE、または ROLLUP が含まれている場合、 選択リスト内の GROUP BY 項目とそれに関連した GROUPING 列関数は、 結果セットのユニーク・キーを形成していなければなりません。 したがって、以下の制約事項が満たされていなければなりません。
        • どのグループ・セットも反復することはできない。 例えば、ROLLUP(X,Y),X は指定できません。 これは GROUPING SETS((X,Y),(X),(X)) と同等だからです。
        • X が、GROUPING SETS、CUBE、または ROLLUP 内に出現する NULL 可能な GROUP BY 項目である場合、 選択リスト内に GROUPING(X) がなければならない。
    • GROUP BY 節を指定しない場合、以下の固有性に関連した制限が当てはまります。
      • マテリアライズ照会表の固有性要件は、 それぞれの基礎表に定義されているユニーク・キー制約の 1 つから マテリアライズ・ビュー用のユニーク・キーを導出することによって達成されます。 したがって、基礎表には少なくとも 1 つのユニーク・キー制約が定義されている必要があり、 それらのキーの列が、マテリアライズ照会表定義の選択リストに現れていなければなりません。
REFRESH DEFERRED を指定する場合は、以下のようにします。
  • マテリアライズ照会表を作成するときに、その後のステートメントで関連したステージング表を用意するつもりであれば、マテリアライズ照会表の全選択は、REFRESH IMMEDIATE オプションでマテリアライズ照会表を作成するときに使用する全選択の場合と同じ制限事項および規則に従う必要があります。
  • 照会が再帰的な場合は、照会処理の最適化のためにマテリアライズ照会表を使用しません。
  • マテリアライズ照会表は、静的照会の処理を最適化するためには使用されません。

全選択に GROUP BY 節が含まれるマテリアライズ照会表は、 全選択で参照される表からの要約されたデータです。 そのようなマテリアライズ照会表は、サマリー表 と呼ばれます。 サマリー表は、特殊化したタイプのマテリアライズ照会表です。

行レベルまたは列レベルのアクセス制御がアクティブになっている表に依存する表またはビューを fullselect で参照する場合、マテリアライズ照会表にデータを設定するときにそれらの行レベルまたは列レベルのアクセス制御は無視されます。マテリアライズ照会表は自動的に作成され、その行レベルのアクセス制御はアクティブになります。適切な権限を作成するか、 または SECADM 権限を持つユーザーがこのマテリアライズ照会表の行レベル・アクセス制御を非アクティブにしない限り、 エンド・ユーザーがこの表に直接アクセスを行っても内容は表示されません。 マテリアライズ照会表に対する行レベルまたは列レベルのアクセス制御は、DB2 SQL コンパイラーによるそのマテリアライズ照会表に対する内部ルーティングには影響を及ぼさない点に注意してください。

refreshable-table-options
マテリアライズ照会表の属性のリフレッシュ可能オプションを定義します。
DATA INITIALLY DEFERRED
データは CREATE TABLE ステートメントの一部として表に挿入されません。 データを表に挿入するには、 table-name (表名) を指定する REFRESH TABLE ステートメントが使用されます。
REFRESH
表のデータを保守する方法を示します。
DEFERRED
REFRESH TABLE ステートメントを使っていつでも表のデータをリフレッシュできます。 表のデータには、 REFRESH TABLE ステートメント処理時のスナップショットである照会結果が反映されるにすぎません。 この属性を定義したシステム保守のマテリアライズ照会表には、INSERT、 UPDATE、 または DELETE ステートメントを使用できません (SQLSTATE 42807)。 この属性を定義したユーザー保守のマテリアライズ照会表には、 INSERT、UPDATE、または DELETE ステートメントを使用できます。
IMMEDIATE
DELETE、INSERT、または UPDATE の一部として基礎表に加えられた変更は、 マテリアライズ照会表にカスケードされます。 その場合、表の内容は、どのポイント・イン・タイム指定でも、 指定した subselect (副選択) を処理する場合と同じ内容になります。 この属性を定義したマテリアライズ照会表には、INSERT、 UPDATE、 または DELETE ステートメントを使用できません (SQLSTATE 42807)。
ENABLE QUERY OPTIMIZATION
適切な状況下では、マテリアライズ照会表を照会最適化に使用することができます。
DISABLE QUERY OPTIMIZATION
マテリアライズ照会表を照会の最適化に使用しません。 それでもその表を直接照会することはできます。
MAINTAINED BY
マテリアライズ照会表のデータが、システム、ユーザー、 またはレプリケーション・ツールのいずれによって保守されるかを指定します。 デフォルトは SYSTEM です。
SYSTEM
マテリアライズ照会表のデータがシステムによって保守されるように指定します。
USER
マテリアライズ照会表のデータがユーザーによって保守されるように指定します。 ユーザーは、ユーザー保守のマテリアライズ照会表に対して、 更新、削除、また挿入操作を許可されます。 システム保守のマテリアライズ照会表で使用される REFRESH TABLE ステートメントは、 ユーザー保守のマテリアライズ照会表に対しては呼び出せません。 REFRESH DEFERRED マテリアライズ照会表だけが、MAINTAINED BY USER として定義できます。
FEDERATED_TOOL
マテリアライズ照会表のデータがレプリケーション・ツールによって保守されるように指定します。 システム保守のマテリアライズ照会表で使用される REFRESH TABLE ステートメントは、 フェデレーテッド・ツール保守のマテリアライズ照会表に対しては呼び出せません。 REFRESH DEFERRED のマテリアライズ照会表だけが、MAINTAINED BY FEDERATED_TOOL として定義できます。

このオプションを指定すると、CREATE TABLE ステートメント中の SELECT 節に基本表への参照を含めることはできません (SQLSTATE 428EC)。

staging-table-definition
関連付けられたマテリアライズ照会表を通して間接的に、 ステージング表によりサポートされる照会を定義します。 マテリアライズ照会表の基礎表は、関連付けられたステージング表の基礎表でもあります。 ステージング表は、 基礎表の内容と同期化するためにマテリアライズ照会表に適用する必要のある変更を収集します。

行レベルまたは列レベルのアクセス制御がアクティブになっている表に 依存する表またはビューを fullselect で参照する場合、ステージング表にデータを設定するときにそれらの行レベルまたは列レベルのアクセス制御は無視されます。ただし、ステージング表は自動的に作成され、その行レベルのアクセス制御はアクティブになります。 適切な権限を作成するか、 または SECADM 権限を持つユーザーがこのステージング表の行レベル・アクセス制御を非アクティブにしない限り、 エンド・ユーザーがこのステージング表に直接アクセスを行っても内容は表示されません。 ステージング表に対する行レベルおよび列レベルのアクセス制御は、ステージング表でキャプチャーした変更を関連マテリアライズ照会表にアプライする内部プロセスには影響を及ぼさない点に注意してください。

staging-column-name
ステージング表の列の名前を指定します。 列名のリストを指定する場合、ステージング表を定義するマテリアライズ照会表の列の名前の数よりも、 2 つ名前の数が多くなければなりません。 そのマテリアライズ照会表がマテリアライズ照会表の複製である場合、 またはマテリアライズ照会表を定義している照会が GROUP BY 節を含んでいない場合の列名のリストは、 ステージング表を定義するマテリアライズ照会表の列の名前の数よりも、 3 つ名前の数が多くなければなりません。 各 column-name (列名) は、ユニークかつ非修飾でなければなりません。 列名のリストの指定がない場合、表の列は、関連付けられたマテリアライズ照会表の列名を継承します。 追加の列は GLOBALTRANSID および GLOBALTRANSTIME と名づけられ、 3 番目の列が必要な場合には OPERATIONTYPE という名前が付けられます。
表 2. ステージング表に加えられる追加の列
列名 データ・タイプ 列の説明
GLOBALTRANSID CHAR(8) FOR BIT DATA 伝搬された各行のグローバル・トランザクション ID
GLOBALTRANSTIME CHAR(13) FOR BIT DATA トランザクションのタイム・スタンプ
OPERATIONTYPE INTEGER 伝搬された行に対する操作。 挿入、更新、または削除のいずれか。

関連付けられたマテリアライズ照会表の任意の列が、生成列名と重複する場合には、 列名のリストを指定する必要があります (SQLSTATE 42711)。

FOR table-name2
ステージング表の定義に使用されるマテリアライズ照会表を指定します。 名前 (暗黙的または明示的なスキーマ名を含む) は、 REFRESH DEFERRED に定義された現行サーバーに存在するマテリアライズ照会表を指定していなければなりません。 関連付けられたマテリアライズ照会表の全選択は、 REFRESH IMMEDIATE オプションによってマテリアライズ照会表を作成するのに使用した全選択と同じ制限事項および規則に従う必要があります。

ステージング表の内容が、関連付けられたマテリアライズ照会表および基礎ソース表と整合する場合には、 REFRESH TABLE ステートメントを呼び出すことにより、ステージング表の内容を使用してマテリアライズ照会表をリフレッシュできます。

PROPAGATE IMMEDIATE
削除、挿入、または更新操作の一部として基礎表に加えられた変更は、 ステージング表の同じ削除、挿入、または更新操作にカスケードされます。 ステージング表が不整合としてマークされていないのであれば、任意のポイント・イン・タイムにおけるその表の内容は、最後にマテリアライズ照会表をリフレッシュした時点からの、基礎表の差分変更になります。
ORGANIZE BY DIMENSIONS (column-name,...)
表データをクラスター化するために使用する、 各列または列のグループのディメンションを指定します。 ディメンション・リストで括弧を使用すると、 列のグループは 1 つのディメンションとして扱われるように指定されます。 DIMENSIONS キーワードはオプションです。 表の定義でこの節が指定されている場合、その表はマルチディメンション・クラスタリング (MDC) 表と呼ばれます。

クラスタリング・ブロック索引はそれぞれ指定されたディメンション用に自動的に保持され、 節で使用されるすべての列で構成されるブロック索引は、 どのクラスタリング・ブロック索引にもすべての列が含まれていない場合には保持されます。 ORGANIZE BY 節で使用される列セットは、CLUSTER を指定する CREATE INDEX ステートメントの規則に従う必要があります。

ORGANIZE BY 節で指定された各列名は、表に対して定義されなければなりません (SQLSTATE 42703)。ディメンションはディメンション・リストに複数回含めることはできません (SQLSTATE 42709)。ディメンションに ROW CHANGE TIMESTAMP 列、行開始列、行終了列、トランザクション開始 ID 列を含めることはできません (SQLSTATE 429BV)。また、XML 列を含めることはできません (SQLSTATE 42962)。

表のページは、表スペースのエクステント・サイズと同じサイズのブロックに配置され、 各ブロックの行すべては同じディメンション値の組み合わせを含みます。

表がマルチディメンション・クラスタリング (MDC) 表であると同時にパーティション表でもあることは可能です。 そのような表の列は、range-partition-spec と MDC キーの両方で使用できます。 ただし、表パーティションは、マルチ列であり、マルチディメンションではありません。

DB2 バージョン 9.7 フィックスパック 1 以降のリリースで作成されるパーティション MDC 表の場合、ブロック索引はパーティション化されます。 パーティション・ブロック索引の配置は、パーティション索引のストレージ配置に関する一般規則に従います。 MDC ブロック索引を含め、ある特定のデータ・パーティションのすべての索引パーティションが、1 つの索引オブジェクトを共有します。 デフォルトでは、特定の各データ・パーティションの索引パーティションは、データ・パーティションと同じ表スペースに存在します。 これは、パーティション・レベルの INDEX IN 節を使用してオーバーライドできます。

DB2 V9.7 以前のリリースで作成された MDC 表の場合、ブロック索引は非パーティション索引であり、再作成されても非パーティション索引のままです。 パーティション・ブロック索引を持つ MDC 表は、非パーティション・ブロック索引を持つ MDC 表と同じデータベースに共存できます。 非パーティション・ブロック索引をパーティション・ブロック索引に変更するには、Online Table Move を使用して MDC 表をマイグレーションします。

ORGANIZE BY KEY SEQUENCE sequence-key-spec
表を、指定された範囲のキー・シーケンスの値に基づいて、 固定サイズの昇順キー・シーケンスに編成するよう指定します。 このような方法で編成された表を、範囲がクラスター化された表 といいます。 定義された範囲内にある有効なキー値のそれぞれには、物理表上の位置があらかじめ決定されています。 範囲がクラスター化された表に必要なストレージは、 表が作成される時点で使用可能になっていなければならず、また、ストレージには、 指定された範囲内にある行の数に行のサイズを乗算しただけのスペースが必要です (スペース所要量の決定に関する詳細は、行サイズの制限およびバイト・カウントを参照してください)。
column-name
範囲がクラスター化された表のシーケンスを決定するユニーク・キーに含まれる、表の列を指定します。 列のデータ・タイプは SMALLINT、INTEGER、または BIGINT (SQLSTATE 42611) でなければならず、 また列は NOT NULL (SQLSTATE 42831) として定義される必要があります。 シーケンス・キーの中で、同じ列を複数回指定することはできません。 指定する列の数は 64 を超えてはなりません (SQLSTATE 54008)。

列ごとに昇順で指定されたキー・シーケンスで、列のカタログにユニーク索引項目が自動的に作成されます。 索引の名前は、SQL の後に文字のタイム・スタンプ (yymmddhhmmssxxx) が続き、 スキーマ名として SYSIBM が付いたものになります。 表の編成はこのキーによって配列されているため、実際の索引オブジェクトはストレージに作成されません。 同じ列に、範囲がクラスター化された表のシーケンス・キーとして主キーまたはユニークな制約が定義されている場合は、 この同じ索引項目が制約に使用されます。

キー・シーケンスの指定には、列の制約を反映するチェック制約が存在します。 DISALLOW OVERFLOW 節が指定されていると、 チェック制約の名前が RCT になり、チェック制約が施行されます。 ALLOW OVERFLOW 節が指定されていると、 チェック制約の名前が RCT_OFLOW になり、チェック制約は施行されません。

STARTING FROM constant
column-name の範囲の下限となる定数を指定します。 指定された定数より小さい値は、 ALLOW OVERFLOW オプションが指定されている場合以外、許可されません。 column-name が SMALLINT または INTEGER 列の場合は、 定数を INTEGER 定数にする必要があります。 column-name が BIGINT 列の場合は、 定数を INTEGER または BIGINT 定数にする必要があります (SQLSTATE 42821)。 開始の定数が指定されない場合、デフォルト値は 1 です。
ENDING AT constant
column-name の範囲の上限となる定数を指定します。 指定された定数より大きい値は、 ALLOW OVERFLOW オプションが指定されている場合以外、許可されません。 なお、終了の定数は、開始の定数より大きくなければなりません。 column-name が SMALLINT または INTEGER 列の場合は、 定数を INTEGER 定数にする必要があります。 column-name が BIGINT 列の場合は、 定数を INTEGER または BIGINT 定数にする必要があります (SQLSTATE 42821)。
ALLOW OVERFLOW
範囲がクラスター化された表で、定義された範囲外の値を行のキー値として許可することを指定します。 範囲がクラスター化された表がオーバーフローを許可するように作成される場合、 キー値が範囲外にある行にはあらかじめ決定された配列がなく、行は定義された範囲の一番下に置かれます。 これらのオーバーフロー行に関係する操作は、 定義された範囲内にキー値がある行での操作と比べて非効率的です。
DISALLOW OVERFLOW
範囲がクラスター化された表で、 定義された範囲外の値を行のキー値として許可しないことを指定します (SQLSTATE 23513)。 オーバーフロー行を許可しない、範囲がクラスター化された表では、常に、 すべての行が昇順キー・シーケンスで保守されます。

表が、範囲がクラスター化されたマテリアライズ照会表の場合、DISALLOW OVERFLOW 節は指定できません (SQLSTATE 429BG)。

PCTFREE integer
各ページに残すフリー・スペースのパーセンテージを指定します。 各ページの最初の行は、制約なしに追加されます。 ページに行が追加される際には、 少なくとも integer で指定された分 (%) のフリー・スペースがページに残されます。 integer の値は 0 から 99 です。 システム・カタログ (SYSCAT.TABLES) の PCTFREE 値 -1 は、デフォルト値として解釈されます。 表ページのデフォルト PCTFREE 値は 0 です。
ORGANIZE BY INSERT TIME
行が挿入される時を基準にして、行を表内でクラスター化するように指定します。 行が挿入される場所は、表オブジェクトの論理的な末尾です。使用可能スペースを探索することはありません。 挿入時間を基準として編成される表には、挿入時クラスタリング (ITC) 表と呼ばれるものがあります。 このタイプの表では、REORG TABLE RECLAIM EXTENTS を使用することで、表スペース内の他のオブジェクトですぐに使用するために空きエクステントを再利用できます。

データは、暗黙的に作成された仮想ディメンションを使用してクラスター化されます。 この仮想ディメンションのために、クラスタリング・ブロック索引が自動的に保守されます。 仮想ディメンションは、直接操作するこことはできません。また、表に存在する行ごとにスペースが消費されることはありません。 表のページは、同じサイズのブロック単位で配置されます。このサイズは、表スペースのエクステント・サイズに相当します。

表が型付き表の場合、ORGANIZE BY INSERT TIME 節は指定できません (SQLSTATE 428DH)。

DATA CAPTURE
データベース間のデータのレプリケーションに関する追加情報を、 ログに書き込むかどうかを指定します。 この節は、副表を作成する際には指定できません (SQLSTATE 428DR)。

この節が指定されず、当該の表が型付き表でない場合、デフォルトは、表が作成されるときのスキーマの DATA CAPTURE 設定によって定まります。

NONE
追加情報をログに記録しないことを指定します。
CHANGES
この表に対する SQL 変更についての追加情報をログに書き込むことを指定します。 このオプションは、表を複製する場合で、 キャプチャー・プログラムを使用してログからこの表に対する変更内容をキャプチャーする場合に必須です。

表が、副表ではない型付き表である場合、このオプションはサポートされません (SQLSTATE 428DH)。

IN tablespace-name,...
表を作成する表スペースを指定します。 表スペースは既存のものでなければならず、同じデータベース・パーティション・グループに含まれていることも必要です。また、すべてが REGULAR DMS 表スペースであるか、すべてが LARGE DMS 表スペースであるか、すべてが SMS 表スペースである必要もあります (SQLSTATE 42838)。ステートメントの許可 ID には、それらの表スペースに対する USE 特権が必要です。

表レベルでは、最大で 1 個の IN 節だけが認められています。 1 つの表が使用するすべてのデータ表スペースは、同じページ・サイズ、同じエクステント・サイズでなければなりません。

表スペースを 1 つだけ指定した場合、すべての表パーツはその表スペースに保管されます。 副表は表階層のルート表から表スペースを継承するので、副表の作成の際にこの節を指定することはできません (SQLSTATE 42613)。

この節が指定されない場合、データベース・マネージャーは、ステートメントの許可 ID が USE 特権を持っている、必要最小限のページ・サイズがある表スペースを (データベース内の既存の表スペースのセットから) 選択します。

複数の表スペースが適格な場合、表スペースに対する USE 特権がステートメントの許可 ID にどのように付与されたかに応じて、以下の優先順位で表スペースを選択します。
  1. 許可 ID
  2. 許可 ID が付与されているロール
  3. 許可 ID を保有するグループ
  4. 許可 ID を保有するグループが付与されているロール
  5. PUBLIC
  6. PUBLIC が付与されているロール
それでも複数の表スペースがそれに当てはまる場合は、 最終選択はデータベース・マネージャーによって行われます。
表スペースの判別は、以下の場合に変更されることがあります。
  • 表スペースをドロップまたは作成するとき
  • USE 特権を付与または取り消すとき

パーティション表では、それぞれのデータ・パーティションを複数の表スペースに配分できます。 複数の表スペースを指定する場合、そのすべての表スペースは既存のものでなければならず、すべてが SMS 表スペースであるか、すべてが REGULAR DMS 表スペースであるか、すべてが LARGE DMS 表スペースであることが必要です (SQLSTATE 42838)。 ステートメントの許可 ID には、指定したすべての表スペースに対する USE 特権が必要です。

十分な表のページ・サイズは、行のバイト・カウントか列の数のいずれかによって決まります。 詳しくは、行サイズの制限を参照してください。

LARGE 表スペースに表を配置すると、以下のようになります。
  • REGULAR 表スペースに配置する表よりもサイズを大きくできます。 表と表スペースの制限値の詳細については、『SQL の制限値』を参照してください。
  • 表のデータ・ページ当たり、255 を超える行数をサポートできるので、データ・ページのスペース使用効率が向上します。
  • REGULAR 表スペースに配置した表に索引を定義する場合に比べ、索引の 1 つの行項目当たり 2 バイトが追加で必要になります。
CYCLE または NO CYCLE
明示的な表スペースのないデータ・パーティションの数が、指定された表スペースの数を超えてもよいかどうかを指定します。
CYCLE
明示的な表スペースのないデータ・パーティションの数が、指定された表スペースの数を超えた場合に、データ・パーティションにラウンドロビン方式で表スペースを割り当てることを指定します。
NO CYCLE
明示的な表スペースのないデータ・パーティションの数が、指定された表スペースの数を超えてはならないことを指定します (SQLSTATE 428G1)。 このオプションを指定すると、データ・パーティションにラウンドロビン方式で表スペースが割り当てられることはありません。
tablespace-options
索引または長形式列の値を保管する表スペースを指定します。 表スペースのタイプについては、『CREATE TABLESPACE』を参照してください。
INDEX IN tablespace-name
非パーティション表の索引またはパーティション表の非パーティション索引を作成する表スペースを指定します。指定する表スペースは既存でなければなりません。表のデータが DMS 表スペースにある場合は DMS 表スペースでなければならず、パーティション表のデータが SMS 表スペースにある場合は SMS 表スペースでなければなりません。ステートメントの許可 ID には、その表スペースに対する USE 特権が必要です。その表スペースは、tablespace-name と同じデータベース・パーティション・グループに含まれている必要があります (SQLSTATE 42838)。

索引を組み込む表スペースの指定は、表の作成時に行うことができます。また、パーティション表の場合は、非パーティション索引の CREATE INDEX ステートメントの IN 節を指定することによって行うことも可能です。表スペースに対する USE 特権があるかどうかのチェックは、後に索引を作成する時ではなく表の作成時に行われます。

パーティション表上の非パーティション索引の場合、索引のストレージは、次のようになります。
  • CREATE INDEX ステートメントの IN 節による表スペース
  • CREATE TABLE ステートメントの INDEX IN 節に指定された表レベルの表スペース
  • 上記のどちらも指定されていない場合は、最初のアタッチされたデータ・パーティションか、可視のデータ・パーティションの表スペースに索引が保管されます。
パーティション表上のパーティション索引に関する情報は、partition-element INDEX IN 節の説明を参照してください。
LONG IN tablespace-name
長形式列の値を保管する表スペースを指定します。 長形式列には、LOB データ・タイプ、XML タイプ、これらのいずれかをソース・タイプとする特殊タイプ、インラインで保管できない値を持つユーザー定義の構造化タイプで定義された列が含まれます。このオプションは、IN 節で DMS 表スペースを指定した場合にのみ使用できます。

指定した表スペースは存在していなければなりません。 これは、データが保管されている同じ表スペースである場合、REGULAR 表スペースとすることもできます。そうでない場合は、ステートメントの許可 ID が USE 特権を保持する LARGE DMS 表スペースでなければなりません。 さらに、これは tablespace-name と同じデータベース・パーティション・グループに含まれている必要があります (SQLSTATE 42838)。

長形式、LOB、または XML の列を組み込む表スペースの指定は、表の作成時にのみ行えます。USE 特権があるかどうかのチェックは、長形式列または LOB 列を追加するときではなく表の作成時に行われます。

パーティション表で LONG IN 節の使用を制御する規則については、『パーティション表でのラージ・オブジェクトの動作』を参照してください。

distribution-clause
データベース・パーティションの方式、つまり複数のデータベース・パーティションにデータを配分させる方法を指定します。
DISTRIBUTE BY HASH (column-name,...)
複数のデータベース・パーティションにデータを分散させる方式として、分散キー という指定の列でデフォルトのハッシュ機能を使用する方式を指定します。 column-name は、表の列を指定する非修飾名でなければなりません (SQLSTATE 42703)。同じ列を複数回指定することはできません (SQLSTATE 42709)。 データ・タイプが BLOB、CLOB、DBCLOB、XML、またはこれらのタイプのいずれかに基づく特殊タイプ、構造化タイプの列は、分散キーの一部として使用できません (SQLSTATE 42962)。分散キーに ROW CHANGE TIMESTAMP 列を含めることはできません (SQLSTATE 429BV)。 副表では、分散キーを指定できません (SQLSTATE 42613)。分散キーは、表階層のルート表から、またはデータ・タイプ XML の列がある表から 継承されるからです (SQLSTATE 42997)。 分散キーに、行開始/行終了/トランザクション開始 ID 列を含めることはできません。 この節の指定がなく、この表が複数データベース・パーティションの複数パーティション・データベース・パーティション・グループに存在する場合、その分散キーは次のように定義されます。
  • 表が型付き表である場合は、オブジェクト ID 列が分散キーになります。
  • 主キーが定義されている場合は、その主キーの最初の列が分散キーになります。
  • その他の場合は、分散キーとして有効なデータ・タイプの最初の列が分散キーになります。
分散キーの列は、ユニーク制約を構成する列のサブセットでなければなりません。

デフォルトの分散キーの要件を満たす列が存在しない場合は、分散キーなしで表が作成されます。 このような表は、単一パーティションのデータベース・パーティション・グループに対して定義された表スペースでのみ認められています。

単一パーティションのデータベース・パーティション・グループに対して定義された表スペースの表の場合は、分散キーとして有効なデータ・タイプの任意の列の集合を分散キーの定義に使用できます。 この節を指定しない場合は、分散キーが作成されません。

分散キーに関連した制約事項については、規則を参照してください。

DISTRIBUTE BY REPLICATION
表が定義される表スペースのデータベース・パーティション・グループの各データベース・パーティションに対して、 表に保管されたデータを物理的に複製することを指定します。 つまり、それぞれのデータベース・パーティションには、 表のデータすべてのコピーが存在することになります。 このオプションは、マテリアライズ照会表にのみ指定できます (SQLSTATE 42997)。
partitioning-clause
データベース・パーティション内でデータを分割する方法を指定します。
PARTITION BY RANGE range-partition-spec
表の表パーティション方式を指定します。
partition-expression
キー・データを指定します。このキー・データに対して、ターゲット・データ・パーティションを決定するための範囲を定義します。
column-name
表パーティション・キーの列を指定します。column-name は、表の列を指定する非修飾名でなければなりません (SQLSTATE 42703)。 同じ列を複数回指定することはできません (SQLSTATE 42709)。 データ・タイプが BLOB、CLOB、DBCLOB、XML、これらのタイプのいずれかに基づく特殊タイプ、構造化タイプの列は、表パーティション・キーの一部として使用できません (SQLSTATE 42962)。

範囲仕様に使用される数値リテラルには、数値リテラル用の規則が適用されます。 数値列に対応する範囲で使用されるすべての数値リテラル (10 進浮動小数点特殊値を除く) は、数値定数に指定された規則に従って、整数、浮動小数点数、または 10 進定数として解釈されます。 結果として 10 進浮動小数点数列では、データ・パーティションの範囲仕様に使用できる最小および最大の数値定数の値は、それぞれ、最小の DOUBLE 値および最大の DOUBLE 値になります。 10 進浮動小数点特殊値を範囲仕様で使用することができます。 すべての 10 進浮動小数点特殊値は、MINVALUE よりも大きく MAXVALUE よりも小さいものとして解釈されます。

表パーティション列に ROW CHANGE TIMESTAMP 列を含めることはできません (SQLSTATE 429BV )。指定する列の数が 16 を超えてはなりません (SQLSTATE 54008)。

NULLS LAST または NULLS FIRST
表パーティション・キー列に NULL 値がある行のパーティション配置を指定します。これらの節は、ORDER BY 節で行が戻される順序には影響を与えません。
NULLS LAST
NULL 値を最高値と見なし、MAXVALUE で終わる範囲に配置するように指定します。
NULLS FIRST
NULL 値を最低値と見なし、MINVALUE で始まる範囲に配置するように指定します。
partition-element
データ・パーティション・キーの範囲と、その範囲内の表の行を保管する表スペースを指定します。
PARTITION partition-name
データ・パーティションの名前を指定します。 この名前は、表の他のいずれのデータ・パーティションとも同じであってはなりません (SQLSTATE 42710)。 この節を指定しない場合は、「PART」の後に文字形式の整数値が付いた名前になります (このようにして、その表での固有の名前になります)。
boundary-spec
データ・パーティションの境界を指定します。 最下位のデータ・パーティションには starting-clause を組み込み、最上位のデータ・パーティションには ending-clause を組み込む必要があります (SQLSTATE 56016)。 最下位と最上位の間にあるデータ・パーティションには、starting-clause と ending-clause のいずれかまたは両方の節を組み込めます。 ending-clause だけを指定する場合は、その直前のデータ・パーティションにも ending-clause を組み込んでおく必要があります (SQLSTATE 56016)。
starting-clause
データ・パーティションの範囲の下限を指定します。 開始値は、少なくとも 1 つ指定しなければなりませんが、開始値の数がデータ・パーティション・キーの列の数を超えてはなりません (SQLSTATE 53038)。 指定した値の数が列の数よりも少なければ、残りの値は暗黙的に MINVALUE になります。
STARTING FROM
この後に、starting-clause を指定します。
constant
対応する column-name のデータ・タイプに割り当てることができるデータ・タイプの定数値を指定します (SQLSTATE 53045)。 この値は、表の他の boundary-spec の範囲内にあってはなりません (SQLSTATE 56016)。
MINVALUE
対応する column-name のデータ・タイプの最小可能値より小さい値を指定します。
MAXVALUE
対応する column-name のデータ・タイプの最大可能値より大きい値を指定します。
INCLUSIVE
指定した範囲値をデータ・パーティションに含めることを指定します。
EXCLUSIVE
指定した constant 値をデータ・パーティションから除外することを指定します。 この指定は、MINVALUE または MAXVALUE を指定した場合は無視されます。
ending-clause
データ・パーティションの範囲の上限を指定します。 開始値は、少なくとも 1 つ指定しなければなりませんが、開始値の数がデータ・パーティション・キーの列の数を超えてはなりません (SQLSTATE 53038)。 指定した値の数が列の数よりも少なければ、残りの値は暗黙的に MAXVALUE になります。
ENDING AT
この後に、ending-clause を指定します。
constant
対応する column-name のデータ・タイプに割り当てることができるデータ・タイプの定数値を指定します (SQLSTATE 53045)。 この値は、表の他の boundary-spec の範囲内にあってはなりません (SQLSTATE 56016)。
MINVALUE
対応する column-name のデータ・タイプの最小可能値より小さい値を指定します。
MAXVALUE
対応する column-name のデータ・タイプの最大可能値より大きい値を指定します。
INCLUSIVE
指定した範囲値をデータ・パーティションに含めることを指定します。
EXCLUSIVE
指定した constant 値をデータ・パーティションから除外することを指定します。 この指定は、MINVALUE または MAXVALUE を指定した場合は無視されます。
IN tablespace-name
データ・パーティションが保管される表スペースを指定します。 指定する表スペースは、パーティション表の他の表スペースと同じページ・サイズ、同じデータベース・パーティション・グループ、同じスペース管理方式でなければなりません (SQLSTATE 42838)。ステートメントの許可 ID には、その表スペースに対する USE 特権が必要です。 この節を指定しない場合は、デフォルトで、表に指定されている表スペースのリストからラウンドロビン方式で表スペースが割り当てられます。 LONG IN 節によってラージ・オブジェクトの表スペースを指定しなかった場合は、ラージ・オブジェクトも、データ・パーティションのその他の行と同じ表スペースに配置されます。 パーティション表の場合は、LONG IN 節を使用して、表スペースのリストを用意できます。 このリストは、各データ・パーティションのラージ・オブジェクトを配置するためにラウンドロビン方式で使用されます。 パーティション表で LONG IN 節の使用を制御する規則については、『パーティション表でのラージ・オブジェクトの動作』を参照してください。

CREATE TABLE ステートメントまたは CREATE INDEX ステートメントで INDEX IN 節を指定しない場合は、表の最初の可視パーティションまたはアタッチされたパーティションと同じ表スペースに索引が配置されます。

INDEX IN tablespace-name
パーティション表上のパーティション索引が保管される表スペースを指定します。

partition-element レベルの INDEX IN 節は、パーティション索引のストレージのみに影響します。索引のストレージは、次のようになります。

  • 表の作成時にパーティション・レベルで INDEX IN 節を指定する場合は、パーティション索引は、指定された表スペースに保管されます。
  • 表の作成時にパーティション・レベルで INDEX IN 節を指定しない場合は、パーティション索引は、対応するデータ・パーティションの表スペースに保管されます。

INDEX IN 節は、データ表スペースが DMS 表スペースで、INDEX IN 節で指定された表スペースが DMS 表スペースの場合にのみ指定できます。データ表スペースが SMS 表スペースの場合は、エラーが戻されます (SQLSTATE 42839)。

LONG IN tablespace-name
長形式列の値を保管する表スペースを指定します。 長形式列には、LOB データ・タイプ、XML タイプ、これらのいずれかをソース・タイプとする特殊タイプ、インラインで保管できない値を持つユーザー定義の構造化タイプで定義された列が含まれます。このオプションは、IN 節で DMS 表スペースを指定した場合にのみ使用できます。

指定した表スペースは存在していなければなりません。 これは、データが保管されている同じ表スペースである場合、REGULAR 表スペースとすることもできます。そうでない場合は、ステートメントの許可 ID が USE 特権を保持する LARGE DMS 表スペースでなければなりません。 さらに、これは tablespace-name と同じデータベース・パーティション・グループに含まれている必要があります (SQLSTATE 42838)。

長形式、LOB、または XML の列を組み込む表スペースの指定は、表の作成時にのみ行えます。USE 特権があるかどうかのチェックは、長形式列または LOB 列を追加するときではなく表の作成時に行われます。

パーティション表で LONG IN 節の使用を制御する規則については、『パーティション表でのラージ・オブジェクトの動作』を参照してください。

EVERY (constant)
自動生成形式の構文を使用した場合に、各データ・パーティション範囲の幅を指定します。 データ・パーティションは、STARTING FROM 値から始まる範囲にこの数の値を組み込む形で作成されます。 この形式の構文は、数値または日時の 1 つの列でパーティション化されている表についてのみサポートされています (SQLSTATE 53038)。

パーティション・キー列が数値タイプの場合、最初のパーティションの開始値は、starting-clause に指定されている値になります。 最初のパーティションと他のすべてのパーティションの終了値は、パーティションの開始値に、EVERY 節の constant として指定されている増分値を加算する形で計算されます。 他のすべてのパーティションの開始値は、直前のパーティションの開始値に、EVERY 節の constant として指定されている増分値を加算する形で計算されます。

パーティション・キー列が DATE または TIMESTAMP の場合、最初のパーティションの開始値は、starting-clause に指定されている値になります。 最初のパーティションと他のすべてのパーティションの終了値は、パーティションの開始値に、EVERY 節のラベル付き期間として指定されている増分値を加算する形で計算されます。 他のすべてのパーティションの開始値は、直前のパーティションの開始値に、EVERY 節のラベル付き期間として指定されている増分値を加算する形で計算されます。

数値列の場合、EVERY の値は正の数値定数でなければならず、日時列の場合、EVERY の値はラベル付き期間でなければなりません (SQLSTATE 53045)。

COMPRESS
表の行にデータ圧縮を適用するかを指定します。
NO
データ行圧縮を使用不可にすることを指定します。
YES
データ行圧縮を使用可能にすることを指定します。表に対する挿入と更新の操作で、圧縮が行われるようになります。既存の XML ストレージ・オブジェクトも圧縮されます。アダプティブ圧縮とクラシック行圧縮のどちらの場合も、表に十分なデータが読み込まれた後で、表レベルのコンプレッション・ディクショナリーが自動的に作成されます。これは、XML ストレージ・オブジェクトのデータにも当てはまります。 つまり、XML ストレージ・オブジェクトに十分なデータがある場合、 コンプレッション・ディクショナリーが自動的に作成され、XML 文書は圧縮の対象になります。
注: XML ストレージ・オブジェクトに適用される圧縮についても同じです。 アダプティブ圧縮あるいはクラシック行圧縮のどちらを使用しているかは関係ありません。

アダプティブ行圧縮の場合は、 ページ・レベルのコンプレッション・ディクショナリーが、データ挿入またはデータ変更が表に行われるとすぐに作成または更新されます。

ADAPTIVE
アダプティブ圧縮を使用可能にします。レコードは表レベルおよびページ・レベルのコンプレッション・ディクショナリーを使って圧縮されるようになります。 これは、COMPRESS YES を指定する場合のデフォルトのオプションです。COMPRESS YES ADAPTIVE の機能は、COMPRESS YES STATIC の機能のスーパーセットです。
STATIC
表レベルのコンプレッション・ディクショナリーを使用したクラシック行圧縮を使用可能にします。 これは、以前の DB2 バージョンで存在していた行圧縮機能と同じです。
VALUE COMPRESSION
使用される行形式を判別します。 それぞれのデータ・タイプは、使用される行形式に応じた、異なるバイト・カウントを持ちます。 詳しくは、バイト・カウントを参照してください。表が型付き表である場合、このオプションは、型付き表階層のルート表に対してのみサポートされます (SQLSTATE 428DR)。

NULL 値は 3 バイトを使用して保管されます。 これは、すべてのデータ・タイプの列に対して VALUE COMPRESSION がアクティブでない場合と同じスペース、またはそれより少ないスペースです (CHAR(1) は例外)。 列が NULL 可能として定義されているかいないかは、行サイズ計算には影響しません。 データ・タイプが VARCHAR、VARGRAPHIC、LONG VARCHAR、LONG VARGRAPHIC、CLOB、DBCLOB、BLOB、XML である列の、長さがゼロのデータ値は、2 バイトだけ使用して保管されます。これは、VALUE COMPRESSION がアクティブでない場合に必要とされるストレージを下回ります。 COMPRESS SYSTEM DEFAULT オプションを使用して列を定義すると、列のシステム・デフォルト値も 合計 3 バイトのストレージを使用して保管できるようになります。 これをサポートする行形式は、各データ・タイプのバイト・カウントを決定し、NULL 値、長さがゼロの値、またはシステム・デフォルト値への更新、またはそれらの値からの更新を行う際に、データ・フラグメントの原因となる傾向があります。

WITH RESTRICT ON DROP
表をドロップできないこと、また、表を含む表スペースをドロップできないことを指定します。
NOT LOGGED INITIALLY
表を作成する作業と同一の作業単位にある INSERT、DELETE、UPDATE、CREATE INDEX、DROP INDEX、または ALTER TABLE 操作によって表に対して行われた変更は、いずれもログに記録されません。 このオプションを使用する際の他の考慮事項については、 このステートメントの『注』のセクションを参照してください。

カタログの変更と、ストレージに関連する情報は、 以後の作業単位で表に対して行われた操作と同様にすべてログ記録されます。

注: NOT LOGGED INITIALLY 属性がアクティブな表に対してログに記録されないアクティビティーが生じた場合に、ステートメントが失敗する (ロールバックが発生する) か、または ROLLBACK TO SAVEPOINT が実行されると、その作業単位全体がロールバックされます (SQL1476N)。 さらに、NOT LOGGED INITIALLY 属性がアクティブ化されている表は、 ロールバックされた後にアクセス不能としてマークされ、ドロップしかできなくなります。 したがって、NOT LOGGED INITIALLY 属性がアクティブ化されている作業単位内では、エラーの可能性を最小限に抑えるべきです。
CCSID
表に格納されるストリング・データのコード化スキームを指定します。 CCSID 節を指定しない場合のデフォルトは、Unicode データベースでは CCSID UNICODE、 他のすべてのデータベースでは CCSID ASCII になります。
ASCII
ストリング・データがデータベース・コード・ページでエンコードされることを指定します。 データベースが Unicode データベースの場合は、CCSID ASCII を指定することはできません (SQLSTATE 56031)。
UNICODE
ストリング・データが Unicode でエンコードされることを指定します。 データベースが Unicode データベースの場合、文字データは UTF-8、 GRAPHIC データは UCS-2 になります。 データベースが Unicode データベースでない場合は、文字データは UTF-8 になります。
データベースが Unicode データベースでない場合、 CCSID UNICODE を指定して表を作成できますが、以下の規則が適用されます。
  • 表を作成するより前に、代替照合シーケンスをデータベース構成に指定する必要があります (SQLSTATE 56031)。 CCSID UNICODE 表は、データベース構成に指定されている代替照合シーケンスと照合されます。
  • CCSID ASCII を指定して作成された表または表関数と、 CCSID UNICODE を指定して作成された表または表関数とを、 1 つの SQL ステートメント内で両方とも使用することはできません (SQLSTATE 53090)。 このことは、ステートメント内で直接参照されている表および表関数、 および間接的に (例えば、参照整合性制約、トリガー、マテリアライズ照会表、およびビューの本体内の表によって) 参照されている表および表関数に適用されます。
  • CCSID UNICODE を指定して作成された表は、 SQL 関数または SQL メソッド内では参照できません (SQLSTATE 560C0)。
  • CCSID UNICODE を指定して作成された表を参照する SQL ステートメントは、 SQL 関数または SQL メソッドを呼び出すことができません (SQLSTATE 53090)。
  • GRAPHIC タイプ、XML タイプ、およびユーザー定義タイプは CCSID UNICODE 表内では使用できません (SQLSTATE 560C1)。
  • アンカー・データ・タイプは、CCSID UNICODE を使用して作成された表の列にアンカーすることはできません (SQLSTATE 428HS)。
  • 同じ表に CCSID UNICODE 節と DATA CAPTURE CHANGES 節の両方を指定することはできません (SQLSTATE 42613)。
  • Explain 表は CCSID UNICODE では作成できません (SQLSTATE 55002)。
  • 作成済み一時表および宣言済み一時表は CCSID UNICODE では作成できません (SQLSTATE 56031)。
  • CCSID UNICODE 表は CREATE SCHEMA ステートメントでは作成できません (SQLSTATE 53090)。
  • ロード操作の例外表の CCSID は、この操作のターゲット表と同じでなければなりません (SQLSTATE 428A5)。
  • SET INTEGRITY ステートメントの例外表の CCSID は、 このステートメントのターゲット表と同じでなければなりません (SQLSTATE 53090)。
  • イベント・モニター・データのターゲット表は CCSID UNICODE として宣言されていてはなりません (SQLSTATE 55049)。
  • CCSID UNICODE 表を参照するステートメントは、 DB2 バージョン 8.1 以降のクライアントからのみ呼び出すことができます (SQLSTATE 42997)。
  • SQL ステートメントは常にデータベース・コード・ページで解釈されます。 特にこのことは、リテラル、16 進数リテラル、および区切り ID 内のすべての文字が データベース・コード・ページで表記されていなければならないということを意味します。 そうでないと、文字は置換文字によって置き換えられてしまいます。

呼び出される SQL ステートメント内の表の CCSID に関係なく、 アプリケーション内のホスト変数は常にアプリケーションのコード・ページで表記されます。 DB2 は、アプリケーション・コード・ページとセクション・コード・ページ間での データ変換の必要に応じて、コード・ページ変換を実行します。 レジストリー変数 DB2CODEPAGE をクライアント側で設定して、 アプリケーション・コード・ページを変更することができます。

SECURITY POLICY
表に関連付けるセキュリティー・ポリシーの名前を指定します。
policy-name
現行のサーバーに既に存在するセキュリティー・ポリシーを指定します (SQLSTATE 42704)。
OPTIONS (table-option-name string-constant, ...)
表オプションは、リモート基本表を識別するために使用します。 table-option-name はオプションの名前です。 string-constant は、表オプションの設定を指定します。 string-constant は単一引用符で囲む必要があります。

リモート・サーバー (CREATE SERVER ステートメントに指定されたサーバー名) は、OPTIONS 節に指定しなければなりません。 OPTIONS 節を使用して、 作成中のリモート基本表のスキーマまたは非修飾名をオーバーライドすることもできます。

スキーマ名を指定することが推奨されています。 リモート・スキーマ名が指定されていない場合、表名の修飾子が使用されます。 表名に修飾子がない場合、ステートメントの許可 ID が使用されます。

リモート基本表の非修飾名が指定されていない場合、 table-name が使用されます。

規則