Symfoware(R) Server RDBユーザーズガイド データベース定義編 - FUJITSU -
目次 索引 前ページ次ページ

上へ第2章 データベースの作成

2.10 一時表定義

一時表を利用する場合、一時表およびインデックスを定義します。

一時表は、応用プログラムの利用者に対して専用に作成される表です。複数の利用者から、それぞれ同一の表名で利用することができます。以下のような用途があります。

上記のように、一時表は、他の応用プログラムから独立した表として利用でき、応用プログラムの開発が容易になります。

データベースから利用者単位に必要なデータを抽出した表を作成する

利用者単位に操作するデータが限定される場合や特定のデータを繰り返し参照する場合、事前に必要なデータを抽出したコンパクトな表を作成すると、他の利用者の更新操作に影響されることのない円滑な処理が実現できます。

この処理で一時表を使用すると、マスタ表(在庫表)から利用者単位に設定した条件で抽出したデータを一時表(T1)に格納することによって、コンパクトな表が作成できます。

image

各利用者は、以下のINSERT文を実行することによって、必要なデータを格納した一時表(T1)を作成することができます。

 INSERT INTO T1
  SELECT C1,C2,C3 FROM 在庫表
  WHERE 各利用者が必要とするデータを抽出する条件式

プロシジャルーチンでの処理結果を一時表を利用して応用プログラムに取り込む

一時表は利用者単位に作成されるため、連続して実行するプロシジャルーチン間でのデータの受渡し((1)、(2))および応用プログラムとプロシジャルーチン間でのデータの受渡し((3)、(4))を行うことができます。

image

また、同じ形式の処理結果を出力する、複数の業務を処理するプロシジャルーチンの処理結果を一時表に格納し(5)、応用プログラムに結果を渡す(6)こともできます。

image

具体的な使用例については、“RDBユーザーズガイド 応用プログラム開発編”を参照してください。

応用プログラムからサーバに複数のコネクションを接続した場合は、コネクションごとに一時表が作成されます。これらの一時表は独立した表であり、各コネクション間で一時表を共用することはできません。

image

一時表は、応用プログラムのセションで利用できる表と、トランザクション内で利用できる表とを選択できます。格納したデータは、セションおよびトランザクションが終了すると消滅します。

一時表の格納構造はSEQUENTIAL構造です。また、一時表のインデックスの格納構造はBTREE構造です。格納構造は、自動的に定義されます。

■一時表の定義

一時表の定義は、CREATE TABLEを使用して行います。

一時表定義の例を以下に示します。

データベーススペースDBSP_1およびDBSP_2に対して、在庫一時表を定義するとします。

在庫一時表を定義するCREATE TABLE文
 CREATE GLOBAL TEMPORARY TABLE STOCKS.在庫一時表
                   ↑      ↑
                  スキーマ名  一時表の表名

   (製品番号 SMALLINT NOT NULL, 在庫数量 INTEGER, …
         ↑            ↑
        表要素           表要素

    PRIMARY KEY(製品番号))
        ↑
        表要素

    ON COMMIT DELETE ROWS
          ↑
         行削除指定

    COMMENT '在庫調査用の一時表 '
           ↑
          注釈定義

    ON  DBSP_1   2 ,  DBSP_2  3
        ↑      ↑
  データベーススペース名  利用者数

◆表

一時表につける名前を指定します。表名は、36文字以内の先頭が英字で始まる英数字、または18文字以内の日本語文字列で指定します。表名はスキーマ名で修飾されている必要があります。

◆表要素

一時表の列名、列のデータ型、既定値および列の制約を指定します。列名は、36文字以内の先頭が英字で始まる英数字、または18文字以内の日本語文字列で指定します。列名は表内で一意です。

◆行削除指

一時表内の行の削除時期を指定します。省略した場合は、一時表は、トランザクション内で利用できる表となり、一時表に格納されるデータは、トランザクション終了時に削除されます。

DELETE ROWS:
一時表は、トランザクション内で利用できる表となり、一時表に格納されるデータは、トランザクション終了時に削除されます。
PRESERVE ROWS:
一時表は、セション内で利用できる表となり、一時表に格納されるデータは、セション終了時に削除されます。

◆注釈定義

一時表に対して、文字列または各国語文字列で注釈を指定することができます。最大256バイトの文字列を指定することができます。文字列と各国語文字列の両方を注釈として指定することもできます。注釈が不要な場合は、指定を省略します。

◆データベーススペース名

実際にデータを格納する、物理的なデータベーススペース名を指定します。

◆利用者

データベーススペースに作成する一時表の数を指定します。各データベーススペースの利用者数の総和が、一時表を利用する応用プログラムの多重度となるように、利用者数を指定してください。

◆一時表のDSO名およびDSI名

一時表のDSO名およびDSI名は、“_TEMP”で始まる名前になります。

■インデックスの定義

インデックスの定義は、CREATE INDEXを使用して行います。インデックス定義では、インデックスキーの構成列を指定します。

一時表のインデックスを定義する例を以下に示します。

在庫一時表に対して、インデックスを定義するとします。

インデックスを定義するCREATE INDEX文
CREATE INDEX STOCKS.在庫一時表.在庫一時表IX
         ↑     ↑     ↑
       スキーマ名  一時表の表名  インデックス名

    KEY (製品番号, 在庫数量 )
        ↑     ↑
        列名     列名
         ↑
         キー指定

備考. KEY (製品番号, 在庫数量 )は、キー指定です。

◆インデックス

インデックスにつける名前(インデックス名)を定義します。インデックス名は36文字以内の先頭が英字で始まる英数字、または18文字以内の日本語文字列で指定します。

◆キー指

インデックスキーとする列を列名で指定します。複数の列を組み合わせて1つのインデックスとすることもできます。

インデックスは、一時表定義で指定したデータベーススペースに、一時表と対で作成されます。

image

◆インデックスのDSO名およびDSI名

インデックスのDSO名およびDSI名は、“_TEMP”で始まる名前になります。

■クラスタシステムでの利用

クラスタシステムの場合、一時表は応用プログラムから接続したノードで利用します。したがって、一時表の定義で指定する利用者数は、各ノードに割り当てたディスク上のデータベーススペースの利用者数の総和が各ノードの応用プログラムの多重度数となるようにしてください。

image

在庫一時表を定義するCREATE TABLE文
CREATE GLOBAL TEMPORARY TABLE STOCKS.在庫一時表
                   ↑    ↑
                 スキーマ名 一時表の表名

   (製品番号 SMALLINT NOT NULL, 在庫数量 INTEGER, …
         ↑             ↑
         表要素           表要素

    PRIMARY KEY(製品番号))
        ↑
        表要素

    ON COMMIT DELETE ROWS
          ↑
         行削除指定

    ON  DBSP_1   3 ,   (ノード1での指定)
       DBSP_2   3 ,   (ノード2での指定)
       DBSP_3   3     (ノード3での指定)
        ↑    ↑
 データベーススペース名 利用者数

目次 索引 前ページ次ページ

All Rights Reserved, Copyright (C) 富士通株式会社 2003