ページの先頭行へ戻る
Symfoware Server V10.0.0/V10.0.1 SQLリファレンス

3.22 CREATE TABLE文(表定義)

機能

表定義は、実表および一時表の実表名と表を構成する列の属性を定義します。

記述形式

実表の場合

表要素

一時表の場合

表要素

構文の構成

参照項番

権限

一般規則

一時表指定(GLOBAL TEMPORARY)

一時表を作成する場合に指定します。このとき、行削除指定で一時表内の行の削除時期および格納領域指定で一時表を作成するデータベーススペースを指定します。

なお、一時表には、SEQUENTIAL構造の格納構造(DSO、DSI)が自動的に作成されるため、格納構造を定義する必要はありません。また、作成される格納構造のDSO名、DSI名は“_TEMP”で始まる名前となります。

表名
  • 作成する表の名前を指定します。

  • 表名には、36文字以内の先頭が英字で始まる英数字、または18文字以内の日本語文字列を指定します。

  • 表定義がスキーマ定義に含まれる場合、表名のスキーマ名の修飾を省略した場合は、スキーマ定義で指定したスキーマ名で修飾したとみなされます。また、スキーマ名で修飾する場合は、スキーマ定義で指定したスキーマ名であることが必要です。

  • 表名は、修飾したスキーマ内で一意の名前であることが必要です。

列定義
  • 列定義に指定する一意性指定は、その一意性指定を指定した一意性制約定義の一意列リストに該当列を1つだけ指定した、表制約定義と同じです。

  • 表に対して格納構造定義で分割格納をする場合、表に定義する一意性制約定義に分割キーを構成する列をすべて含むように指定することが必要です。また、列定義に一意性指定が指定できるのは分割キーの列と同じ列だけです。列定義に一意性指定を指定した場合、分割キーを構成する列の数は1つになります。

  • 列定義に行識別子“ROW_ID”は指定できません。

  • 格納構造がSEQUENTIALの表に、BLOB型の列を含む場合は、以下のようになります。

    • BLOB型の列のサイズは、1キロバイトから最大2ギガバイトです。

  • 格納構造がOBJECTの表で、データ型にBLOB型を指定した場合は、以下のようになります。

    • BLOB型の列以外の列は固定長属性であることが必要です。

    • BLOB型の列はNOT NULL制約を指定することが必要です。

    • BLOB型の列は表の最後の列として指定することが必要です。

    • BLOB型で指定するサイズの単位は、G(ギガバイト)、M(メガバイト)およびK(キロバイト)です。

    • BLOB型の列以外の列の合計は最大32000バイトです。

列名
  • 表の列の名前を指定します。

  • 列名には、36文字以内の先頭が英字で始まる英数字、または18文字以内の日本語文字列を指定します。

DEFAULT
  • DEFAULT句は、列の値に対する省略値を指定します。ここで指定する省略値を既定値オプションと呼びます。すなわち、表に行が挿入されるとき、該当列の値が指定されない場合に、列に設定する値を指定します。DEFAULT句に指定可能な値と、列に設定される値を以下に示します。

    なお、表中のLは定義する長さを、Mは設定する定数の長さを表します。

    表3.7 DEFAULT句に指定可能な値と、列に設定される値

    DEFAULT句の指定

    列定義のデータ型

    挿入時に値が指定されない列に設定される値

    なし

    すべてのデータ型

    NULL値

    NULL

    すべてのデータ型

    NULL値

    真数定数

    真数型、概数型

    定数の値

    概数定数

    真数型、概数型

    定数の値

    文字列定数(長さM)

    文字列型(長さL=M)

    定数の値

    文字列型(長さL>M)

    データ型が固定長の場合は定数の右に空白を詰めた値。可変長の場合は定数の値。

    各国語文字列定数
    (長さM)

    各国語文字列型(長さL=M)

    定数の値

    各国語文字列型(長さL>M)

    データ型が固定長の場合は定数の右に空白を詰めた値。可変長の場合は定数の値。

    日付定数

    DATE型

    定数の値

    時刻定数

    TIME型

    定数の値

    時刻印定数

    TIMESTAMP型

    定数の値

    時間隔定数

    INTERVAL型(年月)

    定数の値

    INTERVAL型(日時)

    定数の値

    USER

    文字列型(長さL>=18) (注)

    表に行を挿入するアプリケーションのCONNECT文で指定したログイン名

    日時値関数
    (CURRENT_DATE)

    DATE型

    挿入時の日付

    日時値関数
    (CURRENT_TIME)

    TIME型

    挿入時の時刻

    日時値関数
    (CURRENT_TIMESTAMP)

    TIMESTAMP型

    挿入時の時刻印

    NEXTVAL

    真数型、概数型

    順序番号

    注) データベースの文字コード系がUNICODEの場合、長さはL>=128です。

NOT NULL
  • NOT NULLは、列がNULL値を許さないことを指定します。

一意性制約定義
  • 一意性制約定義は、列または列の並びに、重複する行が発生しないことを指定します。このとき、対象となる列にはすべてNOT NULLが指定されていることが必要です。

  • 一意性制約定義のうちPRIMARY KEYは、表の中で主キーとなる列または列の並びを指定します。PRIMARY KEYは、表定義中で1回だけ指定することができます。

  • 一意性制約定義に指定できる列名の数は、最大64個です。

  • 一意性制約された列名に対するデータ型で指定できる長さの合計は、最大1000バイトです。

  • 一意性制約定義に指定した列または列の並びは、格納構造定義でインデックスの構成列とするか、あるいはクラスタキーとして定義することが必要です。このために、一意性制約にデータ型が概数型またはBLOB型の列を指定することはできません。

  • 表に対して格納構造定義で分割格納をする場合、表に定義する一意性制約定義に分割キーを構成する列をすべて含むように指定することが必要です。また、列定義に一意性指定が指定できるのは分割キーの列と同じ列だけです。

    表に対して格納構造定義で分割をする場合、一意性制約は分割キーの指定を考慮してこれらの規則を満たすように指定してください。特に列定義に一意性制約を指定する場合は、分割キーとして、その列以外を指定できなくなるので注意してください。

行削除指定(ON COMMIT)
  • 一時表内の行の削除時期を指定します。DELETE ROWSを指定するか、または本指定を省略した場合は、一時表はトランザクション内で利用できる表となり、トランザクション終了時に削除されます。PRESERVE ROWSを指定した場合は、一時表はセション内で利用できる表となり、セション終了時に削除されます。

注釈定義(COMMENT)
  • 表および列に対して注釈が定義できます。

  • 注釈は256バイト以内の文字列(日本語記述可能)を指定することができます。

格納領域指定(ON)
  • 格納領域指定は、実表のデータの格納先のデータベーススペースを指定します。

    • 指定されたデータベーススペースにSymfoware/RDBが表の格納構造を定義します。なお、指定されたデータベーススペースは、定義済みであることが必要です。

      定義される格納構造については、“D.3 格納領域指定時の格納構造”を参照してください。

      1つの実表を複数のデータベーススペースに分割して格納するような場合には、格納領域指定を行うことができません。このような場合には、格納構造定義文でデータベーススペースを定義します。

    • 格納領域指定を指定する場合、システム用の動作環境ファイルでDEFAULT_DSI_NAME=CODEを指定した場合は、表名およびスキーマ名に、36文字以内の先頭が英字で始まる英数字、または18文字以内の日本語文字列を指定します。CODEを指定しない場合は、8文字以内で定義します。

    • 格納領域指定を指定する場合、一時表の表名は、36文字以内の先頭が英字で始まる英数字、または18文字以内の日本語文字列を指定します。

データベーススペース名
  • データベーススペース名は、36文字以内の先頭が英字で始まる英数字、または18文字以内の日本語文字列を指定します。

利用者数
  • 一時表を作成する場合に、データベーススペースに作成する一時表の数を1~32767の範囲で指定します。各データベーススペースの利用者数の総和が、同時に一時表を利用するアプリケーションの多重度となるように利用者数を指定してください。

使用例

1

スキーマS1に実表“会社表”を定義します。

CREATE TABLE S1.会社表 (会社番号  SMALLINT NOT NULL PRIMARY KEY,
                        会社名    NATIONAL CHARACTER(10) NOT NULL,
                        電話番号  CHARACTER(14),
                        住所      NATIONAL CHARACTER(20))

2

スキーマS1に実表“発注表”を定義します。なお、取引先、取引製品の並びを主キーとします。また、発注数量の省略値を10とします。

CREATE TABLE S1.発注表 (取引先    SMALLINT NOT NULL,
                        取引製品  SMALLINT NOT NULL,
                        仕入価格  INTEGER,
                        発注数量  SMALLINT DEFAULT 10,
                        PRIMARY KEY(取引先,取引製品))

3

スキーマS1に実表“製品写真表”を定義します。

CREATE TABLE S1.製品写真表 (製品番号  SMALLINT NOT NULL PRIMARY KEY,
                           商品写真  BLOB(2G) NOT NULL)

例4

スキーマS1に一時表“一時在庫表”を定義します。一時在庫表の利用者数を10とします。

CREATE GLOBAL TEMPORARY TABLE S1.一時在庫表
      (製品番号     SMALLINT NOT NULL,
        製品名      NATIONAL CHARACTER(10) NOT NULL,
        在庫数量    INTEGER,
        倉庫番号    SMALLINT,
        PRIMARY KEY(製品番号))
        ON DBSPACE1 10