一時表の作成

一時表を使用すると、中間結果表の中から、永続的に保管する行の小規模なサブセットを指定できます。 2 つのタイプの一時表 (作成済みの一時表と宣言済み一時表) があります。

一時表を使用して、大容量のデータをソートし、そのデータを照会することができます。 次に、永続的に格納したい小規模な行数を指定した場合は、その行を基本表に格納することができます。 Db2 における一時テーブルには、作成された一時テーブルと宣言された一時テーブルの2種類があります。 以下のトピックには、各タイプの定義方法を記載してあります。

作成済みの一時表

永続的で共用可能な表を記述する必要があるが、アプリケーション処理が実行されている間だけデータを格納したい場合が時々あります。 このような場合、作成済みの一時表を定義し、使用することができます。 Db2 作成した一時テーブルに対して実行した操作は記録されないため、それらを使用するSQLステートメントはより効率的に実行できます。 各アプリケーション処理には、作成済みの一時表のそれ自身のインスタンスがあります。

例: 作成済みの一時表

例えば、以下のステートメントは、作成済み一時表 TEMPPROD を定義します:

CREATE GLOBAL TEMPORARY TABLE TEMPPROD
  (SERIALNO     CHAR(8)     NOT NULL,
   DESCRIPTION  VARCHAR(60) NOT NULL,
   MFGCOSTAMT   DECIMAL(8,2)        ,
   MFGDEPTNO    CHAR(3)             ,
   MARKUPPCT    SMALLINT            ,
   SALESDEPTNO  CHAR(3)             ,
   CURDATE      DATE        NOT NULL);

宣言済み一時表

アプリケーション処理が実行されている間にデータを格納したいが、永続的で共用可能な表を記述する必要がない場合が時々あります。 このような場合、宣言済み一時表を定義し、使用することができます。

他の Db2 DECLARE ステートメントとは異なり、DECLARE GLOBAL TEMPORARY TABLE は、アプリケーション・プログラムに埋め込んだり、対話式に発行したりできる実行可能ステートメントです。 また、このステートメントを動的に準備することもできます。

アプリケーション・プロセス内のプログラムが DECLARE GLOBAL TEMPORARY TABLE ステートメントを発行すると、Db2 はその表の空のインスタンスを作成します。 INSERT ステートメントを使って宣言済み一時表にデータを追加し、探索または位置指定の UPDATE または DELETE ステートメントを使って表を変更し、SELECT ステートメントを使って表を照会することができます。 宣言済み一時表には索引を作成することもできます。 宣言済み一時表の定義は、アプリケーション処理が実行している限り存在しています。

例: 宣言済み一時表

汎用プログラミングインターフェース情報の開始。

例えば、以下のステートメントは、宣言済み一時表 TEMP_EMP を定義します。 (このサンプルの仮定としては、WORKFILE データベースとその対応の表スペースが、一時表として既に作成済みであるということです。)

DECLARE GLOBAL TEMPORARY TABLE  SESSION.TEMP_EMP
   (EMPNO  CHAR(6)        NOT NULL,
    SALARY DECIMAL(9, 2)          ,
    COMM   DECIMAL(9, 2));  
汎用プログラミングインターフェース情報の終了。

宣言済み一時表の名前に対して修飾子が明示的に指定されると、それは SESSION である必要があります。 その修飾子が無指定の場合、修飾子は暗黙的に SESSION として定義されます。

宣言済み一時表を使用するアプリケーション・プロセスの最後に、Db2 は表の行を削除し、表の記述を暗黙的にドロップします。