一時表の作成
一時表を使用すると、中間結果表の中から、永続的に保管する行の小規模なサブセットを指定できます。 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 は表の行を削除し、表の記述を暗黙的にドロップします。