データベース千夜一夜第33回

データ定義命令(1)~テーブルの作成・削除・変更 長谷川裕行
有限会社 手國堂

一時テーブルの作成

CREATE TABLE命令では、データベース内に長期間保管する必要のない、処理のための一時的なデータを処理中だけ保存するテーブル── 一時テーブル(テンポラリ・テーブル)も作成できます。


- ローカルとグローバル -

一時テーブルには、現在のセッション(サーバーに接続している期間)内だけで有効なローカル一時テーブルと、すべてのセッションにわたって有効を保つグローバル一時テーブルがあります。

書式は通常のCREATE TABLE命令と同じですが、ローカル一時テーブルにはテーブル名の前に「#」記号を1個、グローバル一時テーブルにはテーブル名の前に「#」記号を2個付けます。

int型のフィールド「ID」とvarchar型20桁のフィールド「氏名」を持つローカル一時テーブル「tmp顧客情報」を作るなら、以下のようなSQLを記述します。

  CREATE TABLE #tmp顧客情報 (ID int, 氏名 varchar(20))

アンダーラインの箇所を“##tmp顧客情報”のようにすれば、グローバル一時テーブルになります。


- 一時テーブルの削除 -

一時テーブルは、セッション内でDROP TABLE命令を使って削除することもできますが、サーバーによって自動的に削除されるため、そのままにしておいても構いません。

アプリケーションでは、一定の処理ブロック(プロシージャや関数)内で生成したオブジェクトはブロックを抜ける前に削除し、データベースへの接続も明示的に解除するのが通例ですが、一時テーブルはプログラミング言語で用いるオブジェクトとは意味合いが異なるため、特に明示的な削除を行うという慣例はありません。もちろん、念には念を入れて用が済んだら明示的に削除する──という姿勢は間違っていないと思います。

ローカル一時テーブルは、セッションが終了した直後に削除されます。グローバル一時テーブルは、それを作成したセッションが終了した後、継続してそれを参照していた他のタスク(メモリ上で実行されているプログラム)が参照をやめるまで存在し続けます。

ここで言うタスクは1つのSQL文を実行しているプログラムなので、グローバル一時テーブルを参照しているあるタスクが完了したときに、別のタスクが同じ一時テーブルを参照していなければ、この時点で直ちに一時テーブルは削除されます。

アプリケーションを作成するプログラミング言語のグローバル変数とは扱いが異なり、SQLを実行しているタスクの存続中のみ有効であることに注意しましょう。

ストアドプロシージャ内で作成された一時テーブルは、ストアドプロシージャが終了すれば削除されます。この場合、一時テーブルはストアドプロシージャの中からのみ参照できます。ストアドプロシージャを呼び出した他のストアドプロシージャやアプリケーションから直接参照することはできません。


あとがき

データ定義文の概要とテーブルの作成・削除・変更について解説してきました。本文で述べたように、これらの処理は開発者や管理者が行うもので、一般のエンドユーザーが操作するアプリケーションから利用されることは滅多にありません。

使用頻度が少ないため、実際にこれらの命令を実行する機会も少ないはずです。が、システム開発では非常に重要な命令です。詳細を覚えるより「こんな命令がある」「こんなときにはこんな命令を使えばいい」というスタイルで大枠を理解しておきましょう。


Downloadサンプルファイル (LZH形式 440B)



トップページ
データ定義命令について
データ定義文
テーブルの作成・削除・変更
一時テーブルの作成
ローカルとグローバル
一時テーブルの削除
あとがき
Copyright © MESCIUS inc. All rights reserved.