今回はSI Object Browser(以下、OB)を使用して、“一時表”を使ってみようと思います。
一時表(TEMPORARY TABLE)とはトランザクション終了時、またはセッション終了時にテーブル内のデータが削除されるテーブルです。
上記以外の特徴として、別のセッションからはテーブル内のデータが参照できない点、REDOログへの書き込みが無いため、INSERT処理が早い点があります。
使いどころとしては結合の多いSELECT文を同一トランザクション内で複数回呼び出す場合や、SQLを分割しストアドプログラム構造を簡素化する場合など、ストアドプログラムにて一時的にデータを保持したいときに使用します。
一時表を作るには
通常のテーブルを作るのと同様に、オブジェクトリスト画面の左ツリーより[TABLE]を選択し、 右のリスト上で[新規作成]ボタンを押下します。
- テーブルの新規作成画面を呼び出す -
ここも通常のテーブルを作成するときと同様にテーブルの名前と列の設定をします。
- テーブル定義 -
テーブル名、列名の設定が終わったら[領域情報]タブをクリック。
更新を確認するダイアログが出ますが、ここで[いいえ]を選択します。
(※[はい]を選ぶと通常のテーブルが作成されます。)
- 遷移方法 -
すると[領域情報]タブに移動しますので、[格納方法]を「一時表」に変更します。
- 一時表に設定変更 -
一時表の設定になりますので[データ保持期間]を選んでいただき、最後に[作成]を押下します。
- 一時表の作成 -
一時表の構文と設定の概要
CREATE GLOBAL TEMPORARY TABLE [スキーマ.]テーブル名
(
列名1 データ型,
列名2 データ型,
:
)
ON COMMIT [ DELETE ROWS || PRESERVE ROWS ]
;
設定 | 説明 |
---|---|
DELETE ROWS | コミット時に行を削除。 |
PRESERVE ROWS | コミット時に行を保持(セッション終了時に削除)。 |
※PRIVATE TEMPORARY TABLEというセッション中のみ存在させる一時表もありますが、OBでは対応していないため説明は割愛します。
一時表を使うには
冒頭の特徴でも言いましたが、一時表は別セッションではデータの参照が出来ません。
そのため、プログラムデバッグ中にOBで一時表を見て、「データが入ってない」ということになりますが、これはOracleの仕様です。OBで一時表にデータが格納されるか否かを確認するにはプログラム上で動かしているSQLをOB上で動かす必要があります。
また、通常のテーブルとオプション設定は異なりますが、定義の変更やインデックスも作成することができます。
定義の変更は通常のテーブルと同様の感覚で変更できますが、誰かが使用している場合(データをINSERTしている状態)は定義の変更は出来ません。使用している際は下記のORAエラーが表示されます。
- ORA-14450エラー -
インデックスに関しては一時表を参照する際のパフォーマンスに難があるようなら作成を検討してください。
これも上記と同様で、オプション設定が異なる点、誰かが使用している場合は作成できない点がありますのでご注意ください。
いかがだったでしょうか。今回は一時表についての記事でした。
一時表は開発でよく使用されるオブジェクトの1つです。特徴を把握して使ってください。
- カテゴリ:
- キーワード: