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

3.14 CREATE DSO文(表のDSO定義文)

機能

表のDSO(Data Structure Organization)を定義します。

記述形式-1(表のデータ構造がSEQUENTIAL)

記述形式-2(表のデータ構造がRANDOM)

記述形式-3(表のデータ構造がOBJECT)

構文の構成

参照項番

権限

一般規則

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

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

  • DSO名は、データベース内で一意の名前であることが必要です。

表名
  • 表名は、格納構造定義の対象とする表の名前を指定します。

  • 表名は、スキーマ名で修飾されていることが必要です。

格納オプション(PAGESIZE(n)ORDER(n)CLUSTERおよびRULE)
  • 指定可能な格納オプションを以下に示します。

    表3.5 表のデータ構造と指定可能な格納オプション

    表のデータ構造

    指定可能な格納オプション

    意味

    nに指定可能な値

    SEQUENTIAL

    PAGESIZE(n)

    データ部のページ長

    1,2,4,8,16または32
    (注1) (注2) (注3)

    ORDER(n)

    削除領域の再使用の有無

    0または1

    RANDOM

    PAGESIZE1(n)

    プライム部のページ長

    1,2,4,8,16または32
    (注1)

    PAGESIZE2(n)

    オーバフロー部のページ長

    CLUSTER 列名リスト

    表のクラスタキー

    RULE(値式)

    レコードの格納場所

    OBJECT

    PAGESIZE(n)

    データ部のページ長

    32 (注1)

    注1) ページ長に指定する値の単位は、キロバイトです。1キロバイトは1024バイトです。

    注2) 32キロバイト以上のBLOBを含む場合のページ長は、32キロバイトを推奨します。

    参照

    データ部、プライム部、オーバフロー部および表のクラスタキーの構造については、“RDB運用ガイド(データベース定義編)”を参照してください。

  • 表のデータ構造がOBJECTのDSO定義は、データにBLOB型でサイズが32K以上の値を指定した表に対して定義します。それ以外の表に対しては定義することができません。

ORDER
  • 格納オプションのORDERは、表のデータ構造にSEQUENTIALを指定した場合、省略できません。

ORDER(0):

データの更新時に表のDSI領域の自動再配置を行いません。この場合、削除領域を再使用しません。

ORDER(1):

データの更新時に表のDSI領域の自動再配置を行います。この場合、削除領域を再使用します。

CLUSTER
  • 格納オプションのCLUSTERは、表のデータ構造がRANDOMの場合に、表の中でクラスタキーとなる列または列の並びを指定します。列名リストは列名をカンマ(,)で区切り指定します。

    • NOT UNIQUEは、列名リストに指定する列の組が、一意性制約されていない場合に指定します。列名リストに指定する列の組が一意性制約されている場合に、NOT UNIQUEを指定するとエラーになります。列の組が一意性制約されているとは、表名で指定された表に同じ列の組から構成される一意性制約定義が存在することをいいます。

    • 分割条件を指定する場合、CLUSTERの列名リストは、分割条件の列名リストで指定する列をすべて含むように指定することが必要です。なお、CLUSTERの列名リストは、分割条件の列名リストに等しいか、分割条件の列名リストのうしろに、列名の並びを追加して指定することが必要です。

    • 表のデータ構造がRANDOMの場合に、CLUSTERを省略すると、表定義中のPRIMARY KEYで指定された列の組がクラスタキーになります。このとき、表にPRIMARY KEYが指定されていないとエラーになります。

    • 列名リストに指定可能な列のデータ型を以下に示します。なお、CLUSTERを省略する場合は、表に定義されたPRIMARY KEYは以下に示すデータ型の列で構成されていることが必要です。

      表3.6 CLUSTERおよび分割条件の列名リストに指定可能な列のデータ型

      属性

      精度

      位取り

      長さ

      備考

      SMALLINT

        

      INTEGER

        

      NUMERIC

      1~18

      0~精度

        

      DECIMAL

      1~18

      0~精度

        

      CHARACTER

      1~1000 (注1)

      VARYINGは指定不可

      NATIONAL CHARACTER

      1~500 (注2)

      VARYINGは指定不可

      DATE

        

      TIME

        

      TIMESTAMP

        

      INTERVAL

      1~9

        

      注1) 分割条件に指定する場合は、1~254で指定します。

      注2) 分割条件に指定する場合は、1~127で指定します。

  • 列名リストに指定する列には、NOT NULLが指定されていることが必要です。

RULE
  • 格納オプションのRULEは、表のデータ構造がRANDOMの場合に、レコードの格納場所を決定する値式を指定します。RULEに指定する値式の指定方法は以下のとおりです。

    • 列名と定数による演算式が指定できます。ただし、定数は整数のみが指定可能で、小数点の指定はできません。

    • 計算結果が負数となる値式は指定できません。

    • 値式に指定する列の属性はINTEGER型またはSMALLINT型であることが必要です。

    • 値式に指定する列はクラスタキーであることが必要です。

分割条件(WHERE)
  • 分割条件の指定方法は以下のとおりです。

    • 表を行の集まり単位に分割して格納する場合に、分割の条件を指定します。

    • 実際の分割単位はDSI定義文で指定します。ここでは、分割のための条件のみを指定します。

    • 各分割単位に格納される行は、列名リストに指定された各列に設定する値と、仮値リストの“?”にDSI定義文の分割値で指定された定数を代入した比較の結果により決定されます。

    • “=”は、データを限定してDSIに格納する場合に指定します。

    • BETWEENは、範囲比較でデータをDSIに格納する場合に指定します。

    • DSO定義文で分割条件を指定する場合には、表定義時に一意性制約の指定方法について十分に注意が必要です。詳細については、“3.22 CREATE TABLE文(表定義)”を参照してください。

    • 表のデータ構造がOBJECTのDSO定義には、分割条件は指定できません。

列名リスト

使用例

1

会社表の表のDSOを定義します。(表のデータ構造がSEQUENTIAL)

CREATE DSO 会社表DSO  FROM S1.会社表
            TYPE SEQUENTIAL(PAGESIZE(4),ORDER(1))

2

在庫表を製品名と倉庫番号の値で分割格納する、表のDSOを定義します。(表のデータ構造がSEQUENTIAL)

CREATE DSO 在庫表DSO  FROM S1.在庫表
            TYPE SEQUENTIAL(PAGESIZE(4),ORDER(1))
            WHERE (製品名,倉庫番号) = (?,?)

3

会社表の表のDSOを定義します。なお、会社表の一意性指定にPRIMARY KEYが指定されているものとします。(表のデータ構造がRANDOM)

CREATE DSO 会社表DSO  FROM S1.会社表
            TYPE RANDOM(PAGESIZE1(4),PAGESIZE2(16))

4

在庫表を製品名と倉庫番号の値で分割格納する、表のDSOを定義します。なお、在庫表の一意性指定にPRIMARY KEYが指定されているものとします。(表のデータ構造がRANDOM)

CREATE DSO 在庫表DSO  FROM S1.在庫表
            TYPE RANDOM(PAGESIZE1(4),PAGESIZE2(16))
            WHERE (製品名,倉庫番号) = (?,?)

5

製品写真表に対する表のDSOを定義します。(表のデータ構造がOBJECT)

CREATE DSO 製品写真DSO  FROM S1.製品写真表
            TYPE OBJECT(PAGESIZE(32))