3.2 CREATE TABLE表の定義

<この節の構成>
(1) 機能
(2) 形式
(3) 規則
(4) 使用例

(1) 機能

表を定義します。

CREATE TABLE文は,定義系SQL文記述ファイルに記述します。定義系SQL文記述ファイルについては,マニュアル「TP1/EE/Extended Data Cache 使用の手引」を参照してください。

(2) 形式

表定義::=CREATE FIX TABLE 表名(表要素〔,表要素〕…)
    表用DBエリア指定
    〔表オプション〕…

表要素::=列定義
列定義::=列名 データ型
表用DBエリア指定::=IN DBエリア名
表オプション::={表未使用領域指定|セグメント再利用指定}
表未使用領域指定::=PCTFREE=未使用領域の比率
   未使用領域の比率::=符号なし整数定数
セグメント再利用指定::=SEGMENT REUSE
    {再利用契機セグメント数
    |(再利用契機セグメント数〔,再利用契機セグメント数増分値〕)
     |(,再利用契機セグメント数増分値)
      |NOUSE}
   再利用契機セグメント数::=符号なし整数定数
   再利用契機セグメント数増分値::=符号なし整数定数

(a) FIX

行の長さが固定となる表を定義します。

(b) 表名

定義する表の表名を指定します。表名はシステム内で重複できません。表名については,「1.2.8 名前の修飾」を参照してください。

(c) 表要素

表要素::=列定義

列定義
表を構成する列自体に関する定義(列名,データ型の指定など)を行います。
(d) 列定義

列定義::=列名 データ型

列名
表を構成する列の名前を指定します。同一表内では列名に同じ名前は指定できません。
データ型
列のデータ型を指定します。
(e) 表用DBエリア指定

表用DBエリア指定::=IN DBエリア名

この指定は省略できません。必ず指定してください。

表を格納する表用DBエリア名を指定します。インデクス用DBエリアは指定できません。

(f) 表オプション

表オプションには,同一のオプションを繰り返して指定できません。

(g) 表未使用領域指定

表未使用領域指定::=PCTFREE=未使用領域の比率

ユーザが定義する表の列のデータ型にVARCHARを指定できないため,通常はこの指定を行わないでください。

表の初期作成時にデータベース内に設定する未使用領域の比率を指定します。

表未使用領域指定は,データのインポート時に適用されます。INSERT文やUPDATE文ではPCTFREE=0として扱われます。

未使用領域の比率
未使用領域の比率は,0~99(単位:%)を指定します。この指定を省略すると,0%が仮定されます。
VARCHAR型を含む表に対して,行長の長くなる更新が頻繁に発生する場合は,同一ページ内に行を格納できなくなり,行の配置に乱れが生じるため,未使用領域の比率を高くしてください。
(h) セグメント再利用指定

セグメント再利用指定::=SEGMENT REUSE
   {再利用契機セグメント数
  |(再利用契機セグメント数〔,再利用契機セグメント数増分値〕)
   |(,再利用契機セグメント数増分値)
    |NOUSE}

セグメントの再利用機能を使用して,セグメントの再利用を実行する契機(再利用契機セグメント数または再利用契機セグメント数増分値)を指定します。

セグメントの再利用とは,使用中の表が管理するセグメントで,最後に確保したセグメント内の空きページを使い切った場合,新規セグメントを確保しないで,その表が管理するセグメントから空きページを検索して,割り当てることをいいます。

この指定を省略した場合は,NOUSEを指定したものとして扱います。

セグメントの再利用については,マニュアル「TP1/EE/Extended Data Cache 使用の手引」の「セグメントの再利用の設定」を参照してください。

再利用契機セグメント数
セグメントの再利用を実行する契機となるセグメント数を指定します。
再利用契機セグメント数には,0~16777216の符号なし整数を指定できます。
再利用契機セグメント数を省略した場合,0が仮定されます。
1以上を指定した場合:
確保したセグメント数が,指定した再利用契機セグメント数に達した場合に,セグメントの再利用を実行します。ただし,確保したセグメント数が再利用契機セグメント数に達する前に,新規セグメントが確保できなくなると,その時点でセグメントの再利用を実行します。
セグメントの再利用を実行したあと,次回,空きページを検索する場合は,前回,割り当てたページを起点とします。
0を指定した場合:
新規セグメントが確保できなくなったときにセグメントの再利用を行います。
セグメントの再利用を実行したあと,次回,空きページを検索する場合は,前回,割り当てたページを起点とします。
再利用契機セグメント数増分値
再利用契機セグメント数の増分値を指定します。
再利用契機セグメント数増分値には,0~16777216の符号なし整数を指定できます。
再利用契機セグメント数増分値を省略した場合,0が仮定されます。
1以上を指定した場合:
セグメントの再利用の実行時,その表が管理するセグメントに空きページがなくなり,新規セグメントを確保した場合,再利用契機セグメント数に再利用契機セグメント数増分値を加算した値を新たな再利用契機セグメント数とします。ただし,確保したセグメント数が再利用契機セグメント数に達する前に,新たなセグメントが確保できなくなると,その時点でセグメントの再利用を実行します。
0を指定した場合:
再利用契機セグメント数を増分しません。
確保したセグメント数が再利用契機セグメント数を超えたあとは,新規セグメントが確保できなくなった時点で,セグメントの再利用を実行します。
NOUSE
セグメントの再利用機能を使用しない場合に指定します。
新規セグメントが確保できなくなったときに,セグメントの再利用を実行します。
セグメントの再利用を実行したあと,次回,空きページを検索する場合は,前回,割り当てたページを起点とします。

(3) 規則

  1. XDBUSERが所有する表を定義できます。
  2. 表は最大1024個定義できます。ただし,一つのDBエリアに格納できる表は200個です。
  3. 列は一つの表に最大3000個定義できます。
    列の長さ(データ長)の合計(BL)は,次の式を満たす必要があります。各列のデータ型ごとの長さ(データ長)を次の表に示します。

    [図データ]
    作業表の場合は,次の計算式となります。

    [図データ]
    n:表に定義する列の総数(個)
    Ci:各列のデータ長(バイト)

    表3-2 データ型ごとのデータ長

    項番分類データ型データ長
    (バイト)
    1数データINTEGER4
    2SMALLINT※12
    3DECIMAL(m,n)※2↓m÷2↓+1
    4文字データCHAR(n)n
    5VARCHAR(n)※17
    6時刻印データTIMESTAMP〔(p)〕7+p÷2
    7行IDデータROWID※112
    (凡例)
    m,n:正の整数
    p:{0|2|4|6}
    注※1
    これらのデータ型は作業表だけで使用します。そのため,CREATE TABLE文でこれらのデータ型を指定することはできません。
    注※2
    全体のけた数がmけたで,小数秒のけた数がnけたの固定小数点数です。mを省略した場合は29が仮定されます。

(4) 使用例

(例1)
飲食店表(INSHOKU)を次に示す条件で定義します。
  • 飲食店表はDBDATA001という名称の表用DBエリアに格納します。

CREATE FIX TABLE "INSHOKU"
   ("SID" INT,"TEL_NO" CHAR(10),"SHOP_NAME" CHAR(120),
    "POST_CODE" CHAR(7), "ADDRESS" CHAR(300)) IN DBDATA001

(例2)
飲食店表(INSHOKU)を次に示す条件で定義します。
  • セグメント再利用機能を使用します。再利用契機セグメント数を20,再利用契機セグメント数増分値を10とします。
  • 飲食店表はDBDATA001という名称の表用DBエリアに格納します。

CREATE FIX TABLE "INSHOKU"
   ("SID" INT,"TEL_NO" CHAR(10),"SHOP_NAME" CHAR(120),
    "POST_CODE" CHAR(7), "ADDRESS" CHAR(300))
   IN DBDATA001
   SEGMENT REUSE(20,10)