SQL 解説書

CREATE TABLE

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

呼び出し

このステートメントは、アプリケーション・プログラムに組み込むか、 または動的 SQL ステートメントを使用して発行することができます。 このステートメントは、動的に準備可能な実行可能ステートメントです。 しかし、バインド・オプション DYNAMICRULES BIND を適用する場合、 ステートメントを動的に準備することはできません (SQLSTATE 42509)。

許可

このステートメントの許可 ID には、以下の特権が少なくとも 1 つ含まれている必要があります。

外部キーを定義する場合には、ステートメントの許可 ID が保持する特権として、 親表に対する以下のいずれかが必要になります。

(全選択を使用して) 要約表を定義するには、このステートメントの許可 ID に、 全選択で識別された個々の表または視点に対する以下の特権が少なくとも 1 つ含まれている必要があります。

構文

>>-CREATE--+----------+---TABLE--table-name--------------------->
           '-SUMMARY--'
 
>-----+-| element-list |------------------------------+--------->
      +-OF--type-name1--+--------------------------+--+
      |                 '-| typed-table-options |--'  |
      +-| summary-table-definition |------------------+
      '-LIKE--+-table-name1-+---+-------------------+-'
              +-view-name---+   '-| copy-options |--'
              '-nickname----'
 
        .-DATA CAPTURE NONE----.
>----*--+----------------------+--*----------------------------->
        '-DATA CAPTURE CHANGES-'
 
>-----+-----------------------------------------------+--*------>
      '-IN--tablespace-name1--| tablespace-options |--'
 
>-----+------------------------------------------------------------+>
      |                      .-,---------.                         |
      |                      V           |      .-USING HASHING--. |
      +-PARTITIONING KEY--(-----column---+---)--+----------------+-+
      '-REPLICATED-------------------------------------------------'
 
>----*--+----------------------+---*---------------------------><
        '-NOT LOGGED INITIALLY-'
 
element-list
 
       .-,---------------------------------.
       V                                   |
|---(------+-| column-definition |------+--+---)----------------|
           +-| unique-constraint |------+
           +-| referential-constraint |-+
           '-| check-constraint |-------'
 
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 |------'
 
 
summary-table-definition
 
|--+----------------------------+---AS--(--fullselect--)--| summary-table-options |-->
   |    .-,--------------.      |
   |    V                |      |
   '-(-----column-name---+---)--'
 
>---------------------------------------------------------------|
 
summary-table-options
 
|---+-DEFINITION ONLY--+-------------------+-+------------------|
    |                  '-| copy-options |--' |
    '-| 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-'
 
 
tablespace-options
 
|--+----------------------------------+------------------------->
   |                            (1)   |
   '-INDEX IN--tablespace-name2-------'
 
>-----+----------------------------+----------------------------|
      '-LONG IN--tablespace-name3--'
 
column-definition
 
|---column-name----+---------------------+---------------------->
                   |               (2)   |
                   '-| data-type |-------'
 
>-----+---------------------+-----------------------------------|
      '-| column-options |--'
 
column-options
 
    .---------------------------------------------------------------------------------.
    V                                                                                 |
|------+---------------------------------------------------------------------------+--+->
       +-NOT NULL------------------------------------------------------------------+
       |                 (3)                                                       |
       +-| lob-options |-----------------------------------------------------------+
       |                      (4)                                                  |
       +-| datalink-options |------------------------------------------------------+
       |                              (5)                                          |
       +-SCOPE--+-typed-table-name-+-----------------------------------------------+
       |        '-typed-view-name--'                                               |
       +-+-----------------------------------+---+-+-PRIMARY KEY-+---------------+-+
       | |            (6)                    |   | '-UNIQUE------'               | |
       | '-CONSTRAINT-------constraint-name--'   +-| references-clause |---------+ |
       |                                         '-CHECK--(--check-condition--)--' |
       |                         (7)                                               |
       +-| column-default-spec |---------------------------------------------------+
       |                        (8)                                                |
       '-INLINE LENGTH--integer----------------------------------------------------'
 
>---------------------------------------------------------------|
 

注:

  1. 表の索引をどの表スペースに含めるかを指定できるのは、 表を作成する場合だけです。

  2. 選択する最初の column-option が、 generation-expression を指定した column-default-spec の場合、 data-type を省略することができます。 これは、generation-expression の処理結果のデータ・タイプから判別されます。

  3. lob-options (LOB オプション) 文節は、 ラージ・オブジェクト・タイプ(BLOB、CLOB、および DBCLOB)と、 ラージ・オブジェクト・タイプに基づく特殊タイプに対してのみ適用されます。

  4. datalink-option (データ・リンク・オプション) 文節は、 DATALINK タイプと、DATALINK タイプに基づく特殊タイプに対してのみ適用されます。 これらのタイプには LINKTYPE URL 文節が必須です。

  5. SCOPE 文節は REF タイプに対してのみ適用されます。

  6. バージョン 1 との互換性を保つため、 references-clause (REFERENCES 文節) を定義する column-definition (列定義) では、 CONSTRAINT キーワードを省略することができます。

  7. IDENTITY 列属性は、 複数の区画をもつ拡張エンタープライズ・エディション (EEE) データベースではサポートされません。

  8. INLINE LENGTH は、構造タイプと定義された列に対してのみ用います。

 
data-type
 
|--+-SMALLINT-----------------------------------------------------------------------+->
   +-+-INTEGER-+--------------------------------------------------------------------+
   | '-INT-----'                                                                    |
   +-BIGINT-------------------------------------------------------------------------+
   +-+-FLOAT--+----------------+-+--------------------------------------------------+
   | |        '-(--integer--)--' |                                                  |
   | +-REAL----------------------+                                                  |
   | |        .-PRECISION-.      |                                                  |
   | '-DOUBLE-+-----------+------'                                                  |
   +--+-DECIMAL-+---+--------------------------------+------------------------------+
   |  +-DEC-----+   '-(--integer--+-----------+---)--'                              |
   |  +-NUMERIC-+                 '-,integer--'                                     |
   |  '-NUM-----'                                                                   |
   +--+--+-CHARACTER-+---+------------+----------------+---+----------------------+-+
   |  |  '-CHAR------'   '-(integer)--'                |   |  (1)                 | |
   |  +--+-VARCHAR-------------------+--(--integer--)--+   '--------FOR BIT DATA--' |
   |  |  '--+-CHARACTER-+---VARYING--'                 |                            |
   |  |     '-CHAR------'                              |                            |
   |  '-LONG VARCHAR-----------------------------------'                            |
   |                                                                                |
   +--+-BLOB---+--(--integer--+---+---)---------------------------------------------+
   |  +-CLOB---+              +-K-+                                                 |
   |  '-DBCLOB-'              +-M-+                                                 |
   |                          '-G-'                                                 |
   +-GRAPHIC--+------------+--------------------------------------------------------+
   |          '-(integer)--'                                                        |
   +-VARGRAPHIC--(integer)----------------------------------------------------------+
   +-LONG VARGRAPHIC----------------------------------------------------------------+
   +-DATE---------------------------------------------------------------------------+
   +-TIME---------------------------------------------------------------------------+
   +-TIMESTAMP----------------------------------------------------------------------+
   +-DATALINK--+----------------+---------------------------------------------------+
   |           '-(--integer--)--'                                                   |
   +-distinct-type-name-------------------------------------------------------------+
   +-structured-type-name-----------------------------------------------------------+
   '-REF--(type-name2)--------------------------------------------------------------'
 
>---------------------------------------------------------------|
 

注:

  1. FOR BIT DATA 文節とその後に続く他の列制約とは、任意の順序で指定できます。

 
default-values
 
|--+-constant---------------------------------------------+-----|
   +-datetime-special-register----------------------------+
   +-USER-------------------------------------------------+
   +-NULL-------------------------------------------------+
   '-cast-function--(--+-constant------------------+---)--'
                       +-datetime-special-register-+
                       '-USER----------------------'
 
lob-options
 
       .-LOGGED-----.      .-NOT COMPACT--.
|---*--+------------+---*--+--------------+---*-----------------|
       '-NOT LOGGED-'      '-COMPACT------'
 
datalink-options
 
|---LINKTYPE URL------------------------------------------------>
 
     .-NO LINK CONTROL------------------------------.
>----+----------------------------------------------+-----------|
     '-FILE LINK CONTROL--+-| file-link-options |-+-'
                          '-MODE DB2OPTIONS-------'
 
file-link-options
 
|---*--INTEGRITY----ALL----*--READ PERMISSION--+-FS-+----------->
                                               '-DB-'
 
>----*--WRITE PERMISSION--+-FS------+--*--RECOVERY--+-NO--+----->
                          '-BLOCKED-'               '-YES-'
 
>----*--ON UNLINK--+-RESTORE-+---*------------------------------|
                   '-DELETE--'
 
column-default-spec
 
|---+-| default-clause |-----------------------------------------------+->
    '-GENERATED--+-ALWAYS-----+---AS--+-| identity-clause |----------+-'
                 '-BY DEFAULT-'       '-(--generation-expression--)--'
 
>---------------------------------------------------------------|
 
identity-clause
 
|---IDENTITY--+-------------------------------------------------------+->
              |    .-,-----------------------------------------.      |
              |    V                 .-1----------------.      |      |
              '-(------+-START WITH--+-numeric-constant-+---+--+---)--'
                       |               .-1----------------. |
                       +-INCREMENT BY--+-numeric-constant-+-+
                       | .-CACHE--20----------------.       |
                       '-+-NO CACHE-----------------+-------'
                         '-CACHE--integer-constant--'
 
>---------------------------------------------------------------|
 
 
references-clause
 
|--REFERENCES--table-name----+----------------------------+----->
                             |    .-,--------------.      |
                             |    V                |      |
                             '-(-----column-name---+---)--'
 
>-----| rule-clause |-------------------------------------------|
 
rule-clause
 
      .-ON DELETE NO ACTION-----.      .-ON UPDATE NO ACTION--.
|--*--+-------------------------+---*--+----------------------+---*-->
      '-ON DELETE--+-RESTRICT-+-'      '-ON UPDATE RESTRICT---'
                   +-CASCADE--+
                   '-SET NULL-'
 
>---------------------------------------------------------------|
 
default-clause
 
    .-WITH-.
|---+------+--DEFAULT--+---------------------+------------------|
                       '-| default-values |--'
 
unique-constraint
 
|---+------------------------------+---+-UNIQUE------+---------->
    '-CONSTRAINT--constraint-name--'   '-PRIMARY KEY-'
 
        .-,--------------.
        V                |
>----(-----column-name---+---)----------------------------------|
 
referential-constraint
 
|---+-----------------------------------+--FOREIGN KEY---------->
    |                             (1)   |
    '-CONSTRAINT--constraint-name-------'
 
        .-,--------------.
        V                |
>----(-----column-name---+---)----| references-clause |---------|
 
check-constraint
 
|--+------------------------------+----------------------------->
   '-CONSTRAINT--constraint-name--'
 
>----CHECK--(--check-condition--)-------------------------------|
 
OID-column-definition
 
|---REF IS--OID-column-name--USER GENERATED---------------------|
 
with-options
 
|---column-name--WITH OPTIONS---| column-options |--------------|
 

注:

  1. バージョン 1 との互換性を保つため、 constraint-name (制約名) は FOREIGN KEY に続けて (CONSTRAINT キーワードなしで) 指定することができます。

説明

SUMMARY
要約表が定義されていることを示します。 このキーワードは任意選択ですが、指定する場合には、 ステートメントに summary-table-definition を組み込む必要があります (SQLSTATE 42601)。

table-name
表の名前を指定します。 暗黙または明示の修飾子を含む名前は、 カタログに記述されている表、視点、または別名を指定するものであってはなりません。 スキーマ名は SYSIBM、SYSCAT、SYSFUN、 または SYSSTAT であってはなりません (SQLSTATE 42939)。

OF type-name1
表の列が type-name1 で指定される構造タイプの属性に基づいていることを指定します。 type-name1 の指定にスキーマ名が含まれていない場合、 そのタイプ名は SQL パスのスキーマから探索することによって決まります (このパスは、 静的 SQL の場合は FUNCPATH 前処理オプションによって、 動的 SQL の場合は CURRENT PATH レジスターによって定義されます)。 このタイプ名は、既存のユーザー定義タイプ名である (SQLSTATE 42704) 必要があり、 また、少なくとも 1 つの属性があって (SQLSTATE 42997)、 しかもインスタンス化可能な構造タイプでなければなりません (SQLSTATE 428DP)。

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

HIERARCHY hierarchy-name
表階層に関連する階層表を指定します。 同時に、これは階層のルート表としても作成されます。 タイプ付き表階層に含まれる副表のデータはすべて、この階層表に保管されます。 階層表を SQL ステートメントで直接に参照することはできません。 hierarchy-nametable-name になります。 暗黙または明示のスキーマ名の入った hierarchy-name は、 カタログに記述されている表、ニックネーム、視点、または別名を指定するものであってはなりません。 スキーマ名を指定する場合、 作成する表のスキーマ名と同じにする必要があります (SQLSTATE 428DQ)。 ルート表の定義時にこの文節を省略すると、システムによって名前が生成されます。 この名前は、作成する表の名前とその後の固有な接尾部で構成される識別子であり、 既存の表、視点、別名、およびニックネームの識別子の中で固有のものです。

UNDER supertable-name
表が supertable-name の副表であることを指定します。 スーパー表は既存の表でなければならず (SQLSTATE 42704)、 かつ表は type-name1 のすぐ上のスーパータイプである構造タイプを使用して 定義しなければなりません (SQLSTATE 428DB)。 table-namesupertable-name のスキーマ名は、 同じでなければなりません (SQLSTATE 428DQ)。 supertable-name で指定される表には、 type-name1 で既に定義された既存の副表を含めることはできません (SQLSTATE 42742)。

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

表スペース、データ取り込みなど他の表オプションは、 最初のうちログされません。また、区分化キーを指定することはできません。 これらのオプションはスーパー表から継承されます (SQLSTATE 42613)。

INHERIT SELECT PRIVILEGES
スーパー表に対して SELECT 特権を保持するユーザーや グループはすべて、新しく作成した副表に対しても同様の特権を付与されます。 この特権は、副表定義者によって付与されたものとみなされます。

element-list
表の要素を定義します。 これには、表の列と制約の定義が含まれます。

typed-element-list
タイプ付き表の追加要素を定義します。 これには、列の追加オプション、オブジェクト識別子列 (ルート表のみ) の追加、 表の制約事項などが含まれます。

summary-table-definition
表の定義が照会の結果に基づいている場合に、その表は照会に基づく要約表となります。

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

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

AS
表の定義および表に含まれるデータの判別に使用する照会をこの後に指定します。

fullselect
表の基礎となる照会を定義します。 作成した列定義は、同じ照会で定義した視点の定義と同じになります。

各選択リスト要素には名前が必要です (式には AS 文節を使用します。 詳細は、SELECT 文節を参照してください)。 指定された summary-table-options (要約表オプション) は、 要約表の属性を定義します。 選択されたオプションは、次のような全選択の内容も定義します。

DEFINITION ONLY が指定されている場合、 タイプ付き表またはタイプ付き視点を参照しない有効な全選択を指定することができます。

REFRESH DEFERRED または REFRESH IMMEDIATE が指定されていると、 全選択で次のものを指定できません (SQLSTATE 428EC)。

  • 任意の FROM 文節でのニックネーム、要約表、宣言された一時表、 またはタイプ付き表への参照
  • 視点の全選択が、要約表の全選択に関してリストされたいずれかの制限に違反する場合の、 その視点への参照
  • 参照タイプまたは DATALINK タイプ (あるいはこれらのタイプに基づく特殊タイプ) である式
  • 外部アクションを指定する関数
  • SQL で書かれた関数
  • 物理的特性に依存する関数 (たとえば、NODENUMBER、PARTITION)
  • システム・オブジェクトに対する表または視点参照 (Explain 表も指定できません)
  • 構造タイプまたは LOB タイプ (または LOB タイプに基づいた特殊タイプ) である式

REFRESH IMMEDIATE は、以下の場合に指定されます。

  • 全選択が必ず副選択であること
  • 副選択に以下のものが含まれていないこと
    • deterministic 関数でない関数
    • スカラー全選択
    • 全選択を持つ述部
    • 特殊レジスター
  • 要約表が REPLICATED でない限り、 副選択に GROUP BY 文節が必ず入っていること
  • サポートされている列関数は SUM、COUNT、COUNT_BIG、 および GROUPING (DISTINCT は指定しない)。 選択リストには COUNT(*) または COUNT_BIG(*) 列が含まれていなければなりません。 要約表の選択リストには、SUM(X) が含まれています。 この X には、ヌル可能な引き数が入ります。 さらに、要約表の選択リストには、COUNT(X) も含まれていなければなりません。 これらの列関数は、式の一部とすることはできません。
  • FROM 文節で複数の表または視点を参照している場合、 明示的な INNER JOIN 構文を使わずに内部結合を 1 つだけ定義できます。
  • すべての GROUP BY 項目が選択リストに含まれていること
  • GROUPING SETS、CUBE、および ROLLUP がサポートされていること。 選択リスト内の GROUP BY 項目とそれに関連した GROUPING 列関数は、 結果セットの固有キーを形成していなければなりません。 したがって、以下の制約事項が満たされていなければなりません。
    • どのグループ・セットも反復することはできない。 たとえば、ROLLUP(X,Y), X は指定できません。 これは GROUPING SETS((X,Y),(X),(X)) と同等だからです。
    • X が、GROUPING SETS、CUBE、または ROLLUP 内に出現するヌル可能な GROUP BY 項目である場合、 選択リスト内に GROUPING(X) がなければならない
    • 定数でのグループ化は行えない
  • HAVING 文節は許可されていない
  • 複数の区分ノードグループ内の場合、 区分化キーは、項目別のグループのサブセットでなければならない。 そうでなければ、要約表を複製しなければならない。

summary-table-options
要約表の属性を定義します。

DEFINITION ONLY
照会は、表を定義するときにだけ使われます。 表は照会結果を使って移植されず、REFRESH TABLE ステートメントは使用できません。 CREATE TABLE ステートメントが完了すると、表は要約表とみなされなくなります。

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

refreshable-table-options
要約表の属性の再生可能オプションを定義します。

DATA INITIALLY DEFERRED
データは CREATE TABLE ステートメントの一部として表に挿入されません。 データを表に挿入するには、 table-name (表名) を指定する REFRESH TABLE ステートメントが使用されます。

REFRESH
表のデータを保守する方法を示します。

DEFERRED
REFRESH TABLE ステートメントを使っていつでも表のデータを最新表示できます。 表のデータには、 REFRESH TABLE ステートメント処理時のスナップショットである照会結果が反映されるにすぎません。 この属性を定義した要約表には、INSERT、UPDATE または DELETE ステートメントを使用できません (SQLSTATE 42807)。

IMMEDIATE
DELETE、INSERT、または UPDATE の一部として基礎表に加えられた変更は、 要約表にカスケードされます。 その場合、表の内容は、どの時刻指定でも、 指定した subselect (副選択) を処理する場合と同じ内容になります。 この属性を定義した要約表には、INSERT、UPDATE、 または DELETE ステートメントを使用できません (SQLSTATE 42807)。

ENABLE QUERY OPTIMIZATION
適切な状況下では、要約表を照会最適化に使用することができます。

DISABLE QUERY OPTIMIZATION
要約表を照会の最適化に使用しません。 それでもその表を直接照会することはできます。

LIKE table-name1 または view-name または nickname
表の列の名前と記述が、指定された表 (table-name1)、視点 (view-name)、 またはニックネーム (nickname) の列とまったく同じであることを指定します。 LIKE の後に指定する名前は、カタログに存在する表、視点またはニックネーム、 あるいは宣言された一時表を識別するものでなければなりません。 タイプ付き表またはタイプ付き視点を指定することはできません (SQLSTATE 428EC)。

LIKE は、n 列の暗黙的な定義で使います。n は、 指定した表、視点またはニックネームにおける列の数です。

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

copy-options
これらのオプションは、 ソース結果表の定義 (表、視点、または全選択) の追加属性をコピーするかどうかを指定します。

INCLUDING COLUMN DEFAULTS
ソース結果表の定義の更新可能な各列の列デフォルトをコピーします。 更新可能でない列では、作成される表の対応列内にデフォルトが定義されないことになります。

LIKE table-name が指定され、 しかも table-name が基礎表または一時表を指定する場合、 INCLUDING COLUMN DEFAULTS がデフォルトになります。

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

この文節がデフォルトです。ただし、LIKE table-name が指定され、 しかも table-name が基礎表または一時表を指定する場合を除きます。

INCLUDING IDENTITY COLUMN ATTRIBUTES
可能であれば、ソース結果表の定義から識別列属性 (START WITH、INCREMENT BY、 および CACHE 値) がコピーされます。 識別列属性をコピーできるのは、表、視点、または全選択内の対応する列の要素が、 識別特性をもつ基礎表列名に直接または間接にマップされる表列の名前または視点列の名前である場合です。 これら以外の場合はすべて、新規表の列には識別特性は備わりません。 以下に例を示します。
  • 全選択の選択リストには、識別列名の複数のインスタンスが入ります (つまり、 同一列の複数回の選択)
  • 全選択の選択リストには、複数の識別列が入ります (つまり、結合が関与します)。
  • 識別列は、選択リスト内の式に入ります。
  • 全選択には、SET 演算 (UNION、EXCEPT、または INTERSECT) が入ります。

EXCLUDING IDENTITY COLUMN ATTRIBUTES
ソース結果表の定義から識別列属性はコピーされません。

column-definition
列の属性を定義します。

column-name
表を構成する列の名前を指定します。 名前を修飾することはできず、表の複数の列に対して同じ名前を使用することはできません。

表には、以下のものを指定できます。

  • 最大 500 列の 4K ページ・サイズ。 列のバイト・カウントは 4K ページ・サイズで 4005 を超えてはなりません。 詳細については、行サイズを参照してください。
  • 最大 1 012 列の 8K ページ・サイズ。 列のバイト・カウントは 8101 を超えてはなりません。 詳細については、行サイズを参照してください。
  • 最大 1 012 列の 16K ページ・サイズ。 列のバイト・カウントは 16 293 を超えてはなりません。
  • 最大 1 012 列の 32K ページ・サイズ。 列のバイト・カウントは 32 677 を超えてはなりません。

data-type
以下のリストのタイプのいずれかを指定します。 データ・タイプは、次のとおりです。

SMALLINT
短精度整数。

INTEGER または INT
長精度整数。

BIGINT
大整数。

FLOAT(integer)
単精度または倍精度の浮動小数点数 (integer の値によって異なる)。 integer (整数) は、1 〜 53 の範囲の整数でなければなりません。 1 〜 24 の値は単精度、25 〜 53 の値は倍精度を示します。

また、以下を指定することもできます。

REAL
単精度浮動小数点。
DOUBLE
倍精度浮動小数点。
DOUBLE PRECISION
倍精度浮動小数点。
FLOAT
倍精度浮動小数点。

DECIMAL(precision-integer, scale-integer) または DEC(precision-integer, scale-integer)
10 進数。 最初の整数 (precision-integer) は数値の精度、 つまり数字の総桁数です。これは、1 〜 31 の範囲で指定できます。 2 番目の整数 (scale-integer) は、数値の位取り、 つまり、小数点の右側の桁数です。 これは、0 〜 数値の精度までの範囲で指定できます。

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

CHARACTER(integer)、 または CHAR (integer)、 または CHARACTER、 または CHAR
長さ integer (整数) の固定長文字ストリング。 長さは、1 〜 254 の範囲で指定できます。 長さの指定がない場合は、1 文字の長さを指定したものと見なされます。

VARCHAR(integer)、 または CHARACTER VARYING(integer)、 または CHAR VARYING(integer)
長さが integer の可変長文字ストリング。 長さは、1 〜 32,672 の範囲で指定できます。

LONG VARCHAR
最大長 32700 の可変長文字ストリング。

FOR BIT DATA
列の内容をビット (2 進) データとして扱うように指定します。 他のシステムとのデータ交換の過程で、 コード・ページ変換は行われません。 比較は、データベース照合順序に関係なく 2 進で行われます。

BLOB(integer [K | M | G])
2 進ラージ・オブジェクト・ストリング (最大長をバイト単位で指定)。

長さは、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 です。

1 ギガバイトを超える BLOB ストリングを作成するには、 NOT LOGGED オプションを指定しなければなりません。

integer と K、M、または G の間には、任意の数のスペースを使用できます。 スペースなしでも構いません。 たとえば、次の例はすべて有効です。

   BLOB(50K)    BLOB(50 K)    BLOB (50   K)

CLOB(integer [K | M | G]) 74
文字ラージ・オブジェクト・ストリング (最大長をバイト単位で指定)。

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

1 ギガバイトを超える CLOB ストリングを作成するには、 NOT LOGGED オプションを指定しなければなりません。

DBCLOB(integer [K | M | G])
2 バイト文字ラージ・オブジェクト (最大長を 2 バイト文字の数で指定)。

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

1 ギガバイトを超える DBCLOB ストリングを作成するには、 NOT LOGGED オプションを指定しなければなりません。

GRAPHIC(integer)
長さ integer(整数)の固定長漢字ストリング。 長さは、1 〜 127 の範囲で指定できます。 長さの指定がない場合、長さが 1 であると想定されます。

VARGRAPHIC(integer)
長さが integer の可変長漢字ストリング。 長さは、1 〜 16,336 の範囲で指定できます。

LONG VARGRAPHIC
最大長 16,350 の可変長漢字ストリングを示します。

DATE
日付を示します。

TIME
時刻を示します。

TIMESTAMP
タイム・スタンプを示します。

DATALINK または DATALINK(integer)
データベース外で保管されたデータへのリンクを示します。

表内の列は "アンカー値" で構成されます。 このアンカー値には、外部データだけではなく、 任意コメントへのリンクを確立したり保持したりするための参照情報が含まれています。

DATALINK 列の長さは 200 バイトです。 integer を指定する場合、200 でなければなりません。 長さの指定がない場合、長さは 200 バイトであると想定されます。

DATALINK 値とは、一そろいの組み込みスカラー関数を持つカプセル化された値です。 DATALINK 値は DLVALUE という名前の関数が作成します。 DATALINK 値から属性を抽出するために、以下の関数を使用することができます。

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

DATALINK 列には、以下の制限事項があります。

  • 列は索引の一部であってはならない。 したがって、この列を基本キーまたは固有制約の列として組み込むことはできません (SQLSTATE 42962)。
  • 列は参照制約の外部キーであってはならない (SQLSTATE 42830)。
  • この列にデフォルト値 (WITH DEFAULT) を指定することはできない。 列をヌル値にすることができる場合、この列のデフォルト値は NULL です (SQLSTATE 42894)。

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

特殊タイプを使用して列を定義する場合、 その列のデータ・タイプはその特殊タイプになります。 列の長さと位取りは、それぞれ特殊タイプのソース・タイプの長さと位取りになります。

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

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

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

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

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

タイプ DATALINK の属性をもつ構造タイプか、 または DATALINK をソースとして派生された特殊タイプを使って列が定義されている場合、 その列はヌルにしかできません。 このようなタイプの場合にコンストラクター関数を使うと、 エラーが戻される (SQLSTATE 428ED) ので、このタイプのインスタンスは列に挿入できません。

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

column-options
表の列に関連した追加オプションを定義します。

NOT NULL
列にヌル値が入るのを防止します。

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

lob-options
LOB データ・タイプのオプションを指定します。

LOGGED
列に対して行われた変更をログに書き込むことを指定します。 このような列のデータは、 データベース・ユーティリティー (RESTORE DATABASE など)によって回復することができます。 LOGGED はデフォルト値です。

1 ギガバイトを超える LOB はログ記録することができず (SQLSTATE 42993)、 10 メガバイトを超える LOB はログ記録されない可能性があります。

NOT LOGGED
列に対して行われた変更をログに書き込まないことを指定します。

NOT LOGGED は、コミットやロールバックの操作には影響しません。 つまり、トランザクションがロールバックされても、 LOB の値がログ記録されるか否かに関係なくデータベースの整合性は保持されます。 ログ記録しないなら、ロールフォワード操作中、 バックアップまたはロード操作の後の LOB データは、 ロールフォワード操作中にログ・レコードを再生させることになった LOB 値をゼロによって置換したものになります。 破損回復の過程で、コミットされた変更とロールバックされた変更すべてに、 予期された結果が反映されます。 LOB 列をログ記録しない場合に起こることについては、管理の手引き を参照してください。

COMPACT
後続の付加操作で使用できるスペースを LOB 記憶域の最後に残すことなく、 LOB 列の値で消費されるディスク・スペースを最小限にすることを指定します (LOB 値が使用する最後のグループ内の余分なディスク・スペースすべてを解放します)。 このようにしてデータを保管した場合、 列に対する付加操作 (長さを増加する操作) のパフォーマンスが低下することがあります。

NOT COMPACT
列の LOB 値に対する将来の変更に備えて、 いくらかのスペースを挿入するように指定します。 これはデフォルト値です。

datalink-options
DATALINK データ・タイプに関連したオプションを指定します。

LINKTYPE URL
リンク・タイプを URL として定義します。

NO LINK CONTROL
ファイルが存在するかどうかを判別する検査を行わないことを指定します。 URL の構文だけが検査されます。 データベース・マネージャーによってファイルが制御されることはありません。

FILE LINK CONTROL
ファイルが存在するかどうかを判別する検査が行われるように指定します。 データベース・マネージャーがファイルをより一層制御できるように、 追加オプションが使用されます。

file-link-options
データベース・マネージャーによるファイル・リンク制御の度合いを定義する追加オプション。

INTEGRITY
DATALINK 値と実ファイルの間に存在するリンクの保全レベルを指定します。

ALL
DATALINK 値として指定されているものは、すべてデータベース・マネージャーによって制御されており、 それらは標準的なファイル・システム・プログラム・インターフェースを使って削除したり名前変更したりすることはできません。

READ PERMISSION
DATALINK 値に指定されているファイルの読み取り許可を決定する方法を指定します。

FS
読み取りアクセス許可は、ファイル・システム許可によって決められます。 列でファイル名を検索しなくても、そのようなファイルにアクセスできます。

DB
読み取りアクセス許可は、データベースによって決められます。 有効なファイル・アクセス・トークンを渡してから、 表から検出された DATALINK 値をオープン操作で戻すことによってのみファイルへのアクセスが可能になります。

WRITE PERMISSION
DATALINK 値に指定されているファイルへの書き込み許可を決定する方法を指定します。

FS
書き込みアクセス許可は、データベースによって決められます。 列でファイル名を検索しなくても、そのようなファイルにアクセスできます。

BLOCKED
書き込みアクセスはブロックされます。 このファイルはどのインターフェースを介しても直接更新することはできません。 この情報を更新するには、代替メカニズムを使用しなければなりません。 たとえば、ファイルがコピーされて、そのコピーが更新されるとします。 その場合には、DATALINK 値もファイルの新しいコピーを指すように更新されなければなりません。

RECOVERY
この列の値によって参照されているファイルの特定時点での回復を DB2 がサポートしているかどうかを指定します。

YES
DB2 は、この列の値で参照されているファイルの特定時点での回復をサポートしています。 この値は、INTEGRITY ALL と WRITE PERMISSION BLOCKED とが指定されている場合にだけ指定することができます。

NO
特定時刻での回復がサポートされていないことを指定します。

ON UNLINK
DATALINK 値が変更または削除された (リンク解除された) ときに実行する処置を指定します。 WRITE PERMISSION FS が使用される際には、適用できないことに注意してください。

RESTORE
ファイルがリンク解除されたときに、 ファイルがリンクされていた時点で許可を持つ所有者に、 データリンク・ファイル・マネージャーがファイルを戻すように指定します。 ユーザーがファイル・サーバーから登録を解除されている場合は、 製品によって異なった対応がなされます。 75 この値は、INTEGRITY ALL および WRITE PERMISSION BLOCKED も指定されている場合だけ、 指定することができます。

DELETE
リンク解除される際にファイルが削除されるように指定します。 この値を指定することができるのは、 READ PERMISSION DB および WRITE PERMISSION BLOCKED も指定されている場合だけです。

MODE DB2OPTIONS
このモードは、一連のデフォルトファイル・リンク・オプションを定義します。 DB2OPTIONS によって定義されるデフォルト値は、以下のとおりです。
  • INTEGRITY ALL
  • READ PERMISSION FS
  • WRITE PERMISSION FS
  • RECOVERY NO

WRITE PERMISSION FS が使用されているため、ON UNLINK は適用できません。

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)。

この文節が省略されると、 表に定義されている既存の制約の識別子内で固有な 18 文字の識別子が 76 システムによって生成されます。

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

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

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

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

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

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

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

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

後述の referential-constraint references-clause の項を参照してください。

CHECK (check-condition)
これは、1 つの列に適用される検査制約を定義する簡単な方法として用意されています。 後述の CHECK (check-condition ) を参照してください。

INLINE LENGTH integer
このオプションは、構造タイプを使って定義された列に対してだけ有効であり (SQLSTATE 42842)、 行内の残りの値とともにインラインで保管する構造タイプのインスタンスの最大バイト・サイズを指示します。 インラインで保管できない構造タイプのインスタンスは、 LOB 値が処理されるのに似た方法で、基礎表行とは別に保管されます。 これは自動的に行われます。

構造タイプ列のデフォルトの INLINE LENGTH は、 このタイプのインライン長になります (明示的に指定するか、 または CREATE TYPE ステートメント内のデフォルトとして)。 構造タイプの INLINE LENGTH が 292 未満の場合、列の INLINE LENGTH には値 292 が使われます。
注:サブタイプのインライン長は、デフォルトのインライン長には含まれませんが、 それは、CREATE TABLE 時に明示的に INLINE LENGTH を指定して、 現在および将来のサブタイプに対処できるようにしておかないと、 サブタイプのインスタンスはインラインに適合しないことがあることを意味します。

明示的な INLINE LENGTH の値は少なくとも 292 でなければならず、 32672 を超えてはなりません (SQLSTATE 54010)。

column-default-spec

default-clause
列のデフォルト値を指定します。

WITH
任意選択キーワード。

DEFAULT
INSERT で値が提供されなかった場合、 もしくは INSERT や UPDATE で DEFAULT が指定されている場合に、 デフォルト値を提供します。 DEFAULT キーワードの後にデフォルト値が指定されていない場合、 使用されるデフォルト値は列のデータ・タイプによって異なります。 表 19 を参照してください。

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

列がタイプ付き表の列に基づいている場合、 デフォルト値の定義時には特定のデフォルト値を指定しなければなりません。 タイプ付き表のオブジェクト識別子の列には、 デフォルト値を指定することはできません (SQLSTATE 42997)。

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

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

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

default-values
default-values に指定できるデフォルト値のタイプは、次のとおりです。

constant
列のデフォルト値として定数を指定します。 指定する定数は、次の条件を満たしていなければなりません。
  • 第 3 章に示されている割り当ての規則に従って、 その列に割り当てることができる値でなければなりません。
  • その列が浮動小数点データ・タイプとして定義されている場合を除き、 浮動小数点の定数を指定してはなりません。
  • 定数が 10 進定数の場合、 その列のデータ・タイプの位取りを超えるゼロ以外の数字を含めてはなりません (たとえば、 DECIMAL(5,2) の列のデフォルト値として 1.234 を指定することはできません)。
  • 指定する定数が 254 文字を超えてはなりません。この制約には、 引用符文字や 16 進定数の X などの先行文字も含まれます。さらに、 定数が cast-function の引き数の場合には、 完全修飾された関数名から取った文字や括弧も含めて、この制限を超えてはなりません。

datetime-special-register
INSERT または UPDATE の実行時における日時特殊レジスターの値 (CURRENT DATE、 CURRENT TIME、または CURRENT TIMESTAMP) を、その列のデフォルト値として指定します。 その列のデータ・タイプは、 指定した特殊レジスターに対応するデータ・タイプでなければなりません (たとえば、 CURRENT DATE を指定した場合、データ・タイプは DATE でなければなりません)。

USER
INSERT または UPDATE の実行時における USER 特殊レジスターの値を、 その列のデフォルト値として指定します。 USER を指定した場合、その列のデータ・タイプは、 USER の長さ属性よりも長いか等しい文字ストリングでなければなりません。

NULL
その列のデフォルト値として NULL を指定します。 NOT NULL の値が指定された場合は、 DEFAULT NULL を同じ列定義に指定できますが、 その列をデフォルト値に設定しようとするとエラーが生じます。

cast-function
この形式のデフォルト値は、特殊タイプ (distinct type)、 BLOB、または日時 (DATE、TIME、 または TIMESTAMP) データ・タイプとして定義された列に対してのみ使用することができます。 特殊タイプの場合、BLOB や日時タイプに基づく例外があり、 関数名が列の特殊タイプの名前に一致していなければなりません。 スキーマ名で修飾されている場合には、 その特殊タイプのスキーマ名と同じでなければなりません。 修飾されていない場合には、 関数の解決に用いるスキーマ名は特殊タイプのスキーマ名と同じでなければなりません。 日時タイプに基づく特殊タイプで、デフォルト値が定数の場合、 必ず関数を使用しなければなりません。さらに、その関数名は、 暗黙または明示のスキーマ名 SYSIBM を持つ特殊タイプのソース・タイプ名に一致していなければなりません。 他の日時列の場合は、対応する日時関数も使用できます。 BLOB に基づく BLOB または特殊タイプの場合も、関数を使用する必要があります。 その関数名は、暗黙または明示のスキーマ名 SYSIBM を持つ BLOB でなければなりません。 cast-function の使用法の例は、*** を参照してください。

constant
引き数として定数を指定します。 指定する定数は、 特殊タイプのソース・タイプに関する定数の規則 (特殊タイプでない場合は、 データ・タイプに関する定数の規則) に従っていなければなりません。 cast-function が BLOB の場合には、 定数としてストリング定数を指定する必要があります。

datetime-special-register
CURRENT DATE、CURRENT TIME、または CURRENT TIMESTAMP を指定します。 列の特殊タイプのソース・タイプは、 指定した特殊レジスターに対応するデータ・タイプでなければなりません。

USER
USER 特殊レジスターを指定します。 列の特殊タイプのソース・タイプのデータ・タイプは、 少なくとも 8 バイトの長さのストリング・データ・タイプでなければなりません。 cast-function が BLOB の場合には、 長さ属性が 8 バイト以上でなければなりません。

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

GENERATED
DB2 が列の値を生成することを指示します。 その列が、生成される列または IDENTITY 列とみなされることになる場合は、 GENERATED を指定する必要があります。

ALWAYS
行が表に挿入されるときや、generation-expression の結果値が変更されるたびに、 DB2 は常に列の値を生成することを指示します。 この式の結果は、表に保管されます。 データ伝搬を使用したり、アンロードおよび再ロードの操作を行ったりするのでなければ、 GENERATED ALWAYS の値をお勧めします。 GENERATED ALWAYS は、生成列に必須の値です。

BY DEFAULT
値が指定されていなくても、行が表に挿入されると DB2 は列の値を生成することを指示します。 データ伝搬を使用したり、アンロード / 再ロードを行ったりするときは、BY DEFAULT の値をお勧めします。

明示的には指示されませんが、値の固有性を確保するには、 固有の 1 列の索引を生成列で定義しなければなりません。

AS IDENTITY
列をこの表の識別列にすることを指定します。 77 1 つの表には 1 つの IDENTITY 列しかあってはなりません (SQLSTATE 428C1)。 IDENTITY キーワードを指定できるのは、列に関連付けられた data-type が、 ゼロの位取りの完全な数値タイプである場合か、 78 または、ソース・タイプがゼロの位取りの完全な数値タイプになっている ユーザー定義特殊タイプである場合だけです (SQLSTATE 42815)。

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

START WITH numeric-constant
識別列の最初の値を指定します。 この値は、 この列に割り当てることのできる任意の正または負の値でかまいません (SQLSTATE 42820)。 ただし、小数点の右側に非ゼロの数字がないことを前提とします (SQLSTATE 42894)。 デフォルトは 1 です。

INCREMENT BY numeric-constant
連続した識別列値を 1 つずつ区切る間隔を指定します。 この値は、この列に割り当てることのできる任意の正または負の値でかまいません (SQLSTATE 42820)。 この値は、ゼロであってはならず、長精度整数定数の値を超えてはなりません (SQLSTATE 428125)。 ただし、小数点の右側に非ゼロの数字がないことを前提とします (SQLSTATE 42894)。

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

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

CACHE integer-constant
DB2 で事前割り振りしてメモリーに保存する識別シーケンスの数を指定します。 値を事前割り振りしてキャッシュに保管すれば、識別列用の値の生成時のログ記録が軽減されます。

識別列で新しい値が必要になった場合に、 キャッシュの中のものを使えないときの値の割り振り作業には、ログ記録される間の待機も含まれます。 ただし、識別列で新しい値が必要になった場合に、 キャッシュの中に未使用の値があるときは、ログ記録を実行しなければ、 その識別値の割り振りを迅速に行うことができます。

データベースの非活動化時には、それが通常操作 79 またはシステム障害のどちらに起因するものであっても、 コミット済みのステートメントでまだ使われていないキャッシュされたシーケンス値はすべて失われます。 データベースの活動解除が起きたら失われる可能性のある識別列値の最大数は、 CACHE オプションに指定された値になります。

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

NO CACHE
識別列の値を事前割り振りしないことを指定します。

このオプションを指定すると、識別列の値はキャッシュに保管されません。 その場合、新たに識別値を要求するたびにログ記録がとられることになります。

AS (generation-expression)
列定義が式に基づくことを指定します。 80 generation-expression には、以下のどれも入れることができません (SQLSTATE 42621)。
  • 副照会
  • 列関数
  • 参照解除操作または DEREF 関数
  • 非 deterministic であるユーザー定義関数または組み込み関数
  • EXTERNAL ACTION オプションを使用するユーザー定義関数
  • SCRATCHPAD オプションを使用するユーザー定義関数
  • READS SQL DATA オプションを使用するユーザー定義関数
  • ホスト変数またはパラメーター・マーカー
  • 特殊レジスター
  • 列リスト内で後から定義されている列の参照
  • 他の生成列の参照

列のデータ・タイプは generation-expression の結果データ・タイプに基づいています。 CAST 指定を使って特定のデータ・タイプを強制的に使用し、 効力範囲を設けることができます (参照タイプの場合のみ)。 data-type を指定すると、 言語要素で説明されている割り当て規則に従って、値が列に割り当てられます。 NOT NULL 列オプションを使わない限り、生成された列は暗黙でヌル可能とみなされます。 生成される列のデータ・タイプは、同等性を定義されているものでなければなりません。 ただしこの場合、LONG VARCHAR、LONG VARGRAPHIC、LOB データ・タイプ、DATALINK、 構造タイプ、および、これらのタイプに基づいた特殊タイプの列を除きます (SQLSTATE 42962)。

OID-column-definition
タイプ付き表のオブジェクト識別子列を定義します。

REF IS OID-column-name USER GENERATED
オブジェクト識別子列 (OID) を表の最初の列として定義することを指定します。 表階層のルート表では、OID が必須です (SQLSTATE 428DX)。 この表は副表以外のタイプ付き表 (OF 文節が必須) でなければなりません (SQLSTATE 42613)。 この列の名前は OID-column-name という形式で定義されますが、 構造タイプ type-name1 のどの属性の名前とも同一にすることはできません (SQLSTATE 42711)。 さらに、この列はタイプ REF(type-name1), NOT NULL で定義され、 システム必須の固有索引 (デフォルトの索引名) が生成されます。 この列はオブジェクト識別子列 または 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)。

DATA CAPTURE
データベース間のデータの複製に関する特殊な情報を、 ログに書き込むかどうかを指定します。 この文節は、副表を作成する際には指定できません (SQLSTATE 42613)。

表がタイプ付き表である場合、 このオプションはサポートされません (SQLSTATE 428DH または 42HDR)。

NONE
追加情報をログに記録しないことを指定します。

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

カタログ区分以外の区分にデータが置かれるように表が定義されている場合 (複数区分のノードグループ、 またはカタログ区分以外の区分を持つノードグループ)、 このオプションはサポートされません (SQLSTATE 42997)。

表のスキーマ名 (暗黙または明示名) が 18 バイトより長い場合、 このオプションはサポートされません (SQLSTATE 42997)。

複製の使用法の詳細については、 管理の手引き および レプリケーションの手引きおよび解説書 を参照してください。

IN tablespace-name1
表を作成する表スペースの名前 (tablespace-name) を指定します。 その表スペースは存在していなければならず、 ステートメントの許可 ID がもつ USE 特権の対象の正規 (REGULAR) 表スペースでなければなりません。 他の表スペースが指定されていない場合、 表のすべての部分がこの表スペースに保管されます。 表階層のルート表から表スペースを継承しているため、 この文節は副表を作成する際には指定できません (SQLSTATE 42613)。 この文節を指定しない場合には、この表の表スペースは次のように決められます。

IF table space IBMDEFAULTGROUP over which the user has USE privilege
  exists with sufficient page size
    THEN choose it
 ELSE IF a table space over which the user has USE privilege 
  exists with sufficient page size
  (複数表スペース修飾の場合は下記を参照)
    THEN choose it
 ELSE issue an error (SQLSTATE 42727).

ELSE IF 条件で複数の表スペースが指定されている場合、 ステートメントの許可 ID がもつ USE 特権の対象の最小限必要なページ・サイズをもつ表スペースを選択します。 複数の表スペースがそれにあてはまる場合、 以下のどれに USE 特権が付与されているかに応じて優先順位が決められます。

  1. 許可 ID
  2. 許可 ID を保有するグループ
  3. PUBLIC

それでも複数の表スペースがそれにあてはまる場合は、 最終選択はデータベース・マネージャーによって行われます。

表スペースの決定は、以下の時点で変更することができます。

  • 表スペースを除去または作成するとき
  • USE 特権を付与または取り消すとき

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

tablespace-options:
索引または長形式列の値 (あるいはその両方) が保管される表スペースを指定します。 表スペースのタイプについては、CREATE TABLESPACE を参照してください。

INDEX IN tablespace-name2
表に対する索引を作成する表スペースの名前 (tablespace-name) を指定します。 このオプションは、 IN 文節に指定された基礎表スペースが DMS 表スペースである場合にのみ使用することができます。 指定する表スペースは、存在しており、 ステートメントの許可 ID がもつ USE 特権が対象とする REGULAR DMS 表スペースであり、 tablespace-name1 と同じノードグループになければなりません (SQLSTATE 42838)。

表の索引を入れる表スペースの指定は、 その表の作成時にのみ行うことができる点に注意してください。 索引用の表スペースに対する USE 特権の検査は、表の作成時にしか行われません。 その後の索引の作成時に CREATE INDEX ステートメントの許可 ID が、 表スペースに対する USE 特権をもつことがデータベース・マネージャーによって要求されることはありません。

LONG IN tablespace-name3
長形式列 (LONG VARCHAR、LONG VARGRAPHIC、LOB データ・タイプ、 これらのいずれかをソース・タイプとする特殊タイプ、 またはインラインで保管できない値をもつユーザー定義の構造タイプで定義されたすべての列) の値が保管される表スペースを指定します。 このオプションは、 IN 文節に指定された基礎表スペースが DMS 表スペースである場合にのみ使用することができます。 その表スペースは、存在していて、 ステートメントの許可 ID がもつ USE 特権の対象である LONG DMS 表スペースである必要があり、 tablspace-name1 の同じノードグループ内になければなりません (SQLSTATE 42838)。

表の長形式列と LOB 列を入れる表スペースの指定は、 その表の作成時にのみ行うことができる点に注意してください。 長形式列と LOB 列用の表スペースに対する USE 特権の検査は、表の作成時にしか行われません。 その後の長形式列と LOB 列の追加時に ALTER TABLE ステートメントの許可 ID が、 表スペースに対する USE 特権をもつことがデータベース・マネージャーで要求されることはありません。

PARTITIONING KEY (column-name,...)
表のデータが区分化されている場合に、区分化キーを指定します。 各 column-name (列名) は、表の列を指定するものでなければなりません。 また、同じ列を複数回指定することはできません。 LONG VARCHAR、 LONG VARGRAPHIC、 BLOB、 CLOB、 DBCLOB、 DATALINK、 これらのタイプのいずれかに基づいた特殊タイプ、 または構造タイプであるデータ・タイプの列を、 区分化キーの一部として使用することはできません (SQLSTATE 42962)。 表階層のルート表から区分化キーが継承されるため、 副表である表には区分化キーを指定することはできません (SQLSTATE 42613)。

この文節の指定がなく、この表が複数区分のノードグループに存在する場合、 その区分化キーは次のように定義されます。

  • 表がタイプ付き表である場合、オブジェクト識別子列が区分化キーであり、
  • 基本キーが指定されている場合は、その基本キーの最初の列が区分化キーになります。
  • これら以外の場合、 LOB 以外のデータ・タイプの最初の列、LONG VARCHAR、LONG VARGRAPHIC、DATALINK 列、 これらのタイプのうちのいずれかに基づいた特殊タイプ、 または構造タイプの列が区分化キーになります。

デフォルトの区分化キーの要件を満たす列が存在しない場合、 表は区分化キーなしで作成されます。 このような表は、単一区分のノードグループに対して定義された表スペースでのみ許されます。

単一区分のノードグループに対して定義された表スペースの表の場合、 長形式以外の一連の列はいずれも区分化キーの定義に使用することができます。 このパラメーターの指定がない場合、区分化キーは作成されません。

区分化キーに関する制約事項については、規則を参照してください。

USING HASHING
データ配分の区分化方式として、ハッシュ関数を使用することを指定します。 これは、サポートされる唯一の区分化方式です。

REPLICATED
表が定義される表スペースのノード・グループの各データベース区画に対して、 表に保管されたデータを物理的に複写することを指定します。 つまり、これらのデータベース区画にはそれぞれ、 表のデータすべてのコピーが存在することになります。 このオプションは、要約表にのみ指定できます (SQLSTATE 42997)。

NOT LOGGED INITIALLY
表を作成する作業単位と同一の作業単位の Insert、 Delete、 Update、 Create Index、 Drop Index、 または Alter Table 操作によって表に対して行われた変更はログ記録されません。 このオプションを使用する際の他の考慮事項については、 を参照してください。

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

NOT LOGGED INITIALLY 属性を指定した親を参照する表に、 外部キー制約を定義することはできません。 この文節は、副表を作成する際には指定できません (SQLSTATE 42613)。

注:保管点へのロールバック要求を、 NOT LOGGED INITIALLY 表の作成と同じ作業単位内で発行することはできません。 発行するとエラーが生じ (SQLSTATE 40506)、その作業単位全体がロールバックされます。

unique-constraint
固有制約または基本キー制約を定義します。 表に区分化キーがある場合、 固有キーまたは基本キーは区分化キーのスーパーセットである必要があります。 副表である表では、 固有制約または基本キーを指定することはできません (SQLSTATE 429B3)。 表がルート表である場合、表とそのすべての副表に対して制約が適用されます。

CONSTRAINT constraint-name
基本キー制約、または固有制約の名前を指定します。 *** ページを参照してください。

UNIQUE (column-name,...)
指定した列で構成される固有キーを定義します。 指定する列は NOT NULL として定義されていなければなりません。 各 column-name (列名) は、表の列を指定するものでなければなりません。 また、同じ列を複数回指定することはできません。

指定する列の数は 16 を超えてはならず、 保管されるそれらの長さの合計は 1024 を超えてはなりません (保管される長さの詳細は、 Byte Countsを参照)。 それぞれの列の長さは、どれも 255 バイトを超えてはなりません。 その長さはデータにのみ関するものであり、 出現してもヌル・バイトによって影響を受けることはありません。 列がヌル可能かどうかに関係なく、列の最大データ長は 255 バイトです。 列の長さ属性が 255 バイト以内に収まる場合でも、 LOB、LONG VARCHAR、LONG VARGRAPHIC、DATALINK、 これらのタイプのうちのいずれかに基づく特殊タイプ、または構造タイプは、 固有キーの一部として使用できません (SQLSTATE 42962)。

固有キーの一連の列は、 基本キーまたは別の固有キーの一連の列と同じであってはなりません (SQLSTATE 01543)。81

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

カタログに記録されている表の記述には、固有キーとその固有索引が含まれます。 固有索引は、それぞれの列について昇順に指定された順序で、列に対して自動的に作成されます。

索引の名前は、表の作成時にスキーマに存在する既存の索引と競合しない場合、 constraint-name (制約名) と同じになります。 索引名が競合する場合は、 名前は SQL の後に文字のタイム・スタンプ (yymmddhhmmssxxx) が続き、 スキーマ名として SYSIBM を伴う名前になります。

PRIMARY KEY (column-name,...)
指定された列で構成される基本キーを定義します。 この文節を複数回指定することはできず、 指定する列は NOT NULL として定義されていなければなりません。 各 column-name (列名) は、表の列を指定するものでなければなりません。 また、同じ列を複数回指定することはできません。

指定する列の数は 16 を超えてはならず、 保管されるそれらの長さの合計は 1024 を超えてはなりません (保管される長さの詳細は、 Byte Countsを参照)。 それぞれの列の長さは、どれも 255 バイトを超えてはなりません。 その長さはデータにのみ関するものであり、 出現してもヌル・バイトによって影響を受けることはありません。 列がヌル可能かどうかに関係なく、列の最大データ長は 255 バイトです。 列の長さ属性が 255 バイト以内に収まる場合でも、 LOB、LONG VARCHAR、LONG VARGRAPHIC、DATALINK、 これらのタイプのうちのいずれかに基づく特殊タイプ、または構造タイプは、 基本キーの一部として使用できません (SQLSTATE 42962)。

基本キーの一連の列は、固有キーの一連の列と同じであってはなりません (SQLSTATE 01543)。81

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

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

カタログに記録されている表の記述には、基本キーとその 1 次索引が含まれます。 固有索引は、それぞれの列について昇順に指定された順序で、列に対して自動的に作成されます。

索引の名前は、表の作成時にスキーマに存在する既存の索引と競合しない場合、 constraint-name (制約名) と同じになります。 索引名が競合する場合は、 名前は SQL の後に文字のタイム・スタンプ (yymmddhhmmssxxx) が続き、 スキーマ名として SYSIBM を伴う名前になります。

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

referential-constraint
参照制約を定義します。

CONSTRAINT constraint-name
参照制約の名前を指定します。 *** ページを参照してください。

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

T1 を、ステートメントの対象となる表であると想定します。 参照制約の外部キーは、指定された列で構成されます。 列名リストの各名前は、T1 の列を指定していなければならず、 同じ列を複数回指定することはできません。 指定する列の数は 16 を超えてはならず、 保管されるそれらの長さの合計は 1024 を超えてはなりません (保管される長さの詳細は、 Byte Countsを参照)。 LOB、LONG VARCHAR、LONG VARGRAPHIC、DATALINK、 これらのタイプのうちのいずれかに基づく特殊タイプ、または構造タイプの列を、 外部キーの一部として使用することはできません (SQLSTATE 42962)。 外部キーの列の数は、親キーの列の数と同じでなければならず、 対応する列のデータ・タイプは互換性があることが必要です (SQLSTATE 42830)。 2 つの列の記述は、それらの列が互換性のあるデータ・タイプ (両方の列が数字、 文字ストリング、グラフィック、日付 / 時間であるか、 または同じ特殊タイプ) であれば互換性があります。

references-clause
参照制約の親表と親キーを指定します。

REFERENCES table-name
REFERENCE 文節に指定される表は、 カタログに記述された基礎表を識別している必要がありますが、 カタログ表を示すものであってはなりません。

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

以下の説明で、T2 は指定された親表を、T1 は作成している表 82 を指しています (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 のそれぞれの従属行の外部キーのヌル可能な列がヌル値に設定されます。

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

複数の表の関係するサイクルでは、そのサイクル内の削除規則がすべて CASCADE でない限り、 表がそれ自体に連結削除されていてはなりません。 したがって、新しい関係がサイクルを形成し、T2 がすでに T1 に連結削除されている場合には、 削除規則が CASCADE で、しかもそのサイクルの他の削除規則がすべて CASCADE であるのでない限り、 制約を定義することはできません。

T1 が複数のパスによって T2 に連結削除されている場合、 それらのパスの全体または一部を構成する関係のうち T1 が従属であるものの削除規則は同じでなければならず、 SET NULL にすることはできません。 NO ACTION アクションと RESTRICT アクションの処理は同じです。 したがって、削除規則が r の関係で T1 が T3 の従属表であるとすると、 r が SET NULL のときに、 次の条件のいずれかが存在するなら、参照制約を定義することはできません。

  • T2 と T3 は同じ表です。
  • T2 は T3 の子孫であり、T3 からの行の削除は T2 に連鎖されます。
  • T3 は T2 の子孫であり、T2 からの行の削除は T3 に連鎖されます。
  • T2 と T3 はともに同一の表の従属表であり、 その表からの行の削除は T2 および T3 へ連鎖されます。

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

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

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

NO ACTION と RESTRICT の差異については、 の CREATE TABLE を参照してください。

check-constraint
検査制約を定義します。 検査制約 は、偽以外に評価されなければならない探索条件 です。

CONSTRAINT constraint-name
検査制約の名前を指定します。 *** ページを参照してください。

CHECK (check-condition)
検査制約を定義します。 検査条件 (check-condition) は、次の場合を除いて、探索条件 です。
  • 列参照が、作成する表の列でなければならない場合
  • search-condition に TYPE 述部を入れることはできません。
  • これには、以下のどれも入れることはできません (SQLSTATE 42621)。
    • 副照会
    • 参照解除操作または、 効力範囲をもつ参照引き数がオブジェクト ID (OID) 列以外の列である DEREF 関数
    • SCOPE 文節をもつ CAST 指定
    • 列関数
    • deterministic 関数でない関数
    • 外部アクションをもつと定義された関数
    • SCRATCHPAD オプションを使用するユーザー定義関数
    • READS SQL DATA オプションを使用するユーザー定義関数
    • ホスト変数
    • パラメーター・マーカー
    • 特殊レジスター
    • 別名
    • 識別列以外の生成列の参照

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

検査条件 "IS NOT NULL" も指定できますが、 列の NOT NULL 属性を使用することによって直接的にヌル値可を指定するようにしてください。 たとえば、salary が NULL に設定された場合に、 CHECK (salary + bonus > 30000) は受け入れられます。 これは、CHECK 制約は満たされるか未知かのどちらかでなければならず、 この場合 salary は未知であるためです。 一方、給与 (salary) が NULL に設定されている場合に、 CHECK (salary IS NOT NULL) は偽となり、制約違反とみなされます。

検査制約は、表に対して行の挿入または更新が行われる時点で適用されます。 表で定義される検査制約は、その表の副表すべてに自動的に適用されます。

規則

以下の規則は、区分データベースに対してのみ適用されます。

例 1: DEPARTX 表スペースに表 TDEPT を作成します。 DEPTNO、 DEPTNAME、MGRNO、および ADMRDEPT は列の名前です。 CHAR は、列が文字データを含むことを意味しています。 NOT NULL は、列にヌル値を含めることができないことを示します。 VARCHAR は、列のデータが可変長文字データであることを意味します。 基本キーは、列 DEPTNO で構成されます。

   CREATE TABLE TDEPT
     (DEPTNO   CHAR(3)      NOT NULL,
      DEPTNAME VARCHAR (36) NOT NULL,
      MGRNO CHAR(6),
      ADMRDEPT CHAR(3)     NOT NULL,
      PRIMARY KEY(DEPTNO))
   IN DEPARTX

例 2: SCHED 表スペースに表 PROJ を作成します。 PROJNO、 PROJNAME、 DEPTNO、 RESPEMP、 PRSTAFF、 PRSTDATE、 PRENDATE、 および MAJPROJ は列の名前です。 CHAR は、列が文字データを含むことを意味しています。 DECIMAL は、列のデータがパック 10 進数データであることを意味します。 5,2 の 5 は 10 進数の桁数、2 は小数点以下の桁数を示します。 NOT NULL は、列にヌル値を含めることができないことを示します。 VARCHAR は、列のデータが可変長文字データであることを意味します。 DATE は、列のデータが 3 つの部分からなる形式 (年、月、日) の日付情報であることを示しています。

   CREATE TABLE PROJ
     (PROJNO   CHAR(6)      NOT NULL,
      PROJNAME VARCHAR(24)  NOT NULL,
      DEPTNO   CHAR(3)      NOT NULL,
      RESPEMP  CHAR(6)      NOT NULL,
      PRSTAFF  DECIMAL(5,2)         ,
      PRSTDATE DATE                 ,
      PRENDATE DATE                 ,
      MAJPROJ  CHAR(6)      NOT NULL)
   IN SCHED

例 3: 不明の給与はすべて 0 とみなされる EMPLOYEE_SALARY という名前の表を作成します。 表スペースが指定されていないので、 IN tablespace-name1 文節について記述された規則に基づいてシステムが選択した表スペースに、 表が作成されます。

   CREATE TABLE EMPLOYEE_SALARY
     (DEPTNO   CHAR(3)      NOT NULL,
      DEPTNAME VARCHAR (36) NOT NULL,
      EMPNO    CHAR(6)      NOT NULL,
      SALARY   DECIMAL(9,2) NOT NULL WITH DEFAULT)

例 4: 給与 (SALARY) と距離 (MILES) の合計用の特殊タイプを作成し、 デフォルト表スペースに作成される表の列として使用します。 動的 SQL ステートメントでは、CURRENT SCHEMA 特殊レジスターが JOHNDOE で、 CURRENT PATH がデフォルト値であると想定します ("SYSIBM","SYSFUN","JOHNDOE")。

SALARY の値の指定がない場合には、それを 0 に設定します。 また、LIVING_DIST の値の指定がない場合には、それを 1 マイルに設定します。

  CREATE DISTINCT TYPE JOHNDOE.T_SALARY AS INTEGER WITH COMPARISONS
 
  CREATE DISTINCT TYPE JOHNDOE.MILES AS FLOAT WITH COMPARISONS
 
  CREATE TABLE EMPLOYEE
     (ID          INTEGER NOT NULL,
      NAME        CHAR (30),
      SALARY      T_SALARY NOT NULL WITH DEFAULT,
      LIVING_DIST MILES    DEFAULT MILES(1) )

例 5: 画像 (IMAGE) と音声 (AUDIO) 用の特殊タイプを作成し、表の列として使用します。 表スペースが指定されていないので、 IN tablespace-name1 文節に関して説明した規則に基づいてシステムが選択した表スペースに、 表が作成されます。 CURRENT PATH はデフォルト値であると想定します。

  CREATE DISTINCT TYPE IMAGE AS BLOB (10M)
 
  CREATE DISTINCT TYPE AUDIO AS BLOB (1G)
 
  CREATE TABLE PERSON
     (SSN    INTEGER NOT NULL,
      NAME   CHAR (30),
      VOICE  AUDIO,
      PHOTO  IMAGE)

例 6: HUMRES 表スペースに表 EMPLOYEE を作成します。 表には、次のような制約を定義します。

注:検査制約に含まれる列がヌル値可能である場合、 それらも NULL になる可能性があります。

   CREATE TABLE EMPLOYEE
   (ID          SMALLINT NOT NULL,
    NAME        VARCHAR(9),
    DEPT        SMALLINT CHECK (DEPT BETWEEN 10 AND 100),
    JOB         CHAR(5) CHECK (JOB IN ('Sales','Mgr','Clerk')),
    HIREDATE    DATE,
    SALARY      DECIMAL(7,2),
    COMM        DECIMAL(7,2),
    PRIMARY KEY (ID),
    CONSTRAINT  YEARSAL CHECK (YEAR(HIREDATE) > 1986 OR SALARY > 40500)
   )
   IN HUMRES

例 7: PAYROLL 表スペースに全体が含まれる表を作成します。

   CREATE TABLE EMPLOYEE .....
      IN PAYROLL

例 8: データ部分が ACCOUNTING にあり、索引部分が ACCOUNT_IDX にある表を作成します。

   CREATE TABLE SALARY.....
      IN ACCOUNTING INDEX IN ACCOUNT_IDX

例 9: 表を作成して、SQL の変更内容をデフォルトのフォーマットでログ記録します。

   CREATE TABLE SALARY1 .....

または

   CREATE TABLE SALARY1 .....
      DATA CAPTURE NONE

例 10: 表を作成して、SQL の変更内容を拡張フォーマットでログ記録します。

   CREATE TABLE SALARY2 .....
      DATA CAPTURE CHANGES

例 11: SCHED 表スペースに表 EMP_ACT を作成します。 EMPNO、 PROJNO、ACTNO、EMPTIME、EMSTDATE、および EMENDATE は列の名前です。 表には、次のような制約を定義します。

   CREATE TABLE EMP_ACT
   (EMPNO       CHAR(6) NOT NULL,
    PROJNO      CHAR(6) NOT NULL,
    ACTNO       SMALLINT NOT NULL,
    EMPTIME     DECIMAL(5,2),
    EMSTDATE    DATE,
    EMENDATE    DATE,
    CONSTRAINT EMP_ACT_UNIQ UNIQUE (EMPNO,PROJNO,ACTNO),
    CONSTRAINT FK_ACT_PROJ FOREIGN KEY (PROJNO)
                           REFERENCES PROJECT (PROJNO) ON DELETE CASCADE
   )
   IN SCHED

固有制約を課すために、 EMP_ACT_UNIQ という名前の固有索引が同じスキーマ内に自動的に作成されます。

例 12: アイス・ホッケーの栄誉の殿堂に入る、有名なゴールについての情報を保持する表を作成します。 この表には、ゴールをきめたホッケー選手の名前、 ゴールをきめられたゴールキーパーの名前、日付と場所、 ゴールについての説明文などの情報がリストされます。 さらに、可能ならば、その試合についての新聞記事やゴールのスチール写真と動画の保管先を示します。 新聞記事は削除したり、名前を変更したりできないようにリンクで接続されますが、 この間、既存の表示アプリケーションや更新アプリケーションは操作を続ける必要があります。 スチール写真やムービーはリンクされてからアクセスできるようになりますが、 この操作はすべて DB2 によって制御されます。 リンクが解除されると、スチール写真は回復されて元の所有者に戻されます。 一方、ムービー写真は回復されず、リンクが解除された時点で削除されます。 説明列と 3 つの DATALINK 列はヌル値可能です。

  CREATE TABLE HOCKEY_GOALS
    ( BY_PLAYER      VARCHAR(30)   NOT NULL,
      BY_TEAM        VARCHAR(30)   NOT NULL,
      AGAINST_PLAYER VARCHAR(30)   NOT NULL,
      AGAINST_TEAM   VARCHAR(30)   NOT NULL,
      DATE_OF_GOAL   DATE          NOT NULL,
      DESCRIPTION    CLOB(5000),
      ARTICLES       DATALINK  LINKTYPE URL FILE LINK CONTROL MODE DB2OPTIONS,
      SNAPSHOT       DATALINK  LINKTYPE URL FILE LINK CONTROL
                               INTEGRITY ALL
                               READ PERMISSION DB WRITE PERMISSION BLOCKED
                               RECOVERY YES ON UNLINK RESTORE,
      MOVIE          DATALINK  LINKTYPE URL FILE LINK CONTROL
                               INTEGRITY ALL
                               READ PERMISSION DB WRITE PERMISSION BLOCKED
                               RECOVERY NO ON UNLINK DELETE )

例 13: EMPLOYEE 表に例外表が必要であるとします。 これは、以下のステートメントを使用して作成できます。

  CREATE TABLE EXCEPTION_EMPLOYEE AS
    (SELECT EMPLOYEE.*, 
       CURRENT TIMESTAMP AS TIMESTAMP,
       CAST ('' AS CLOB(32K)) AS MSG
     FROM EMPLOYEE
     ) DEFINITION ONLY
				     

例 14: 示された属性を持つ次のような表スペースがあるとします。

   TBSPACE            PAGESIZE    USER   USERAUTH
   ------------------ ----------- ------ --------
   DEPT4K                    4096 BOBBY  Y
   PUBLIC4K                  4096 PUBLIC Y
   DEPT8K                    8192 BOBBY  Y
   DEPT8K                    8192 RICK   Y
   PUBLIC8K                  8192 PUBLIC Y

例 15: 構造タイプ EMP を使って定義された LEAD 列をもつ表を作成します。 LEAD 列に 300 バイトの INLINE LENGTH を指定します。 これは、300 バイト以内におさまらない LEAD のインスタンスをすべて、 その表以外に保管すること (LOB 値の処理方法と同様に基礎表とは別個に) を指示します。

  CREATE TABLE PROJECTS (PID INTEGER,
    LEAD EMP INLINE LENGTH 300,
    STARTDATE DATE,
              ...)

例 16: DEPTNO、DEPTNAME、MGRNO、ADMRDEPT、 および LOCATION という名前の 5 つの列をもつ表 DEPT を作成します。 DB2 によって常に値が生成されるよう、列 DEPT を IDENTITY 列として定義することにします。 DEPT 列の値は、500 から始まり、1 ずつ増分する必要があります。

  CREATE TABLE DEPT
     (DEPTNO SMALLINT NOT NULL
        GENERATED ALWAYS AS IDENTITY
        (START WITH 500, INCREMENT BY 1),
      DEPTNAME VARCHAR (36) NOT NULL,
      MGRNO CHAR(6),
      ADMRDEPT SMALLINT NOT NULL,
      LOCATION CHAR(30))


脚注:

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

75
DB2 ユニバーサル・データベースの場合、 ファイルは特別に事前定義された「dfmunknown」ユーザー ID に割り当てられます。

76
識別子は、 "SQL" と、タイム・スタンプに基づいて生成される 15 の数字から構成されます。

77
識別列は、複数区画をもつデータベースではサポートされません (SQLSTATE 42997)。 データベースで複数の区画が存在する場合は、識別列を作成できません。 識別列を組み込まれたデータベースを、複数の区画を指定して開始することはできません。

78
ゼロの位取りの SMALLINT、INTEGER、BIGINT、または DECIMAL や、 これらのタイプのうちのいずれかに基づいた特殊タイプは、完全な数値タイプとみなされます。 これに対して、単精度および倍精度の浮動小数点は、近似数値データ・タイプとみなされます。 参照タイプは、完全な数値タイプで表されていても、識別列と定義することはできません。

79
データベースを明示的に活動化 (ACTIVATE コマンドまたは API を使って) していない場合に、 最終アプリケーションの接続をデータベースから切断すると、 暗黙の活動解除が行われます。

80
GENERATED ALWAYS 列の式にユーザー定義の外部関数が入っている場合に、 その関数の実行可能ファイルを変更する (引き数ごとに異なる結果を得るため) と、 データの不整合を生じることがあります。 これが生じないようにするには、SET INTEGRITY ステートメントを使って、 新しい値を強制的に生成させます。

81
LANGLEVEL が SQL92E または MIA であると、エラーが戻されます (SQLSTATE 42891)。

82
または、 この文節が ALTER TABLE ステートメントの記述から参照される場合には、変更される表。


[ ページのトップ | 前ページ | 次ページ | 目次 | 索引 ]