e-learning、オラクル研修、LMS(学習管理システム)のiStudy

e-learning、オラクル研修、LMS(学習管理システム)のiStudy

第92回 「一時表の利用によるプログラミングの簡素化(2)」

2014.04.10

こんにちは。インストラクターの蓑島です。東京はすっかり葉桜です。

前回「一時表」の特徴と活用シーンをご紹介しましたね。
使い方によってはアプリケーションのロジックを簡素できます。

では早速、一時表を実際に作成して、その特徴を確認してみましょう。

SQL> SHOW USER ユーザーは"SCOTT"です。

1
2
3
4
5
6
CREATE GLOBAL TEMPORARY TABLE TEMP01
( A  NUMBER PRIMARY KEY ,
   B  VARCHAR2(10))
/
 
表が作成されました。

まず、上記の例で、一時表を作成しました。
ポイントは構文です。すなわちCREATE GLOBAL TEMPORARY TABLE ~ という構文により一時表の作成となります。上記は、TEMP01という一時表を作成し、その表にはA列、B列があり、A列は主キーとしています。
このように一時表にも主キー列や索引作成を作成することができるのです。

ではこの表に2行INSERTして、問い合わせてみます。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
INSERT INTO TEMP01 VALUES (1, 'ABC' );
 
1行が作成されました。
 
INSERT INTO TEMP01 VALUES (2, 'DEF' );
 
1行が作成されました。
 
SELECT * FROM TEMP01;
 
          A B
---------- ----------
          1 ABC
          2 DEF

普通の表とまったく同じように、INSERT,SELECTが可能ですね。
では次にCOMMITしてSELECTしてみます。どうなるでしょうか?

1
2
3
4
5
6
7
COMMIT ;
 
コミットが完了しました。
 
SELECT * FROM TEMP01;
 
レコードが選択されませんでした。

COMMIT後にデータを問い合わすとレコードが選択されません!つまり、COMMITによりデータが消えてしまったわけです。

では次にCOMMITしてもデータは消えない一時表を作成します。TEMP02という名前で作成します。

1
2
3
4
5
6
7
CREATE GLOBAL TEMPORARY TABLE TEMP02
( A  NUMBER PRIMARY KEY ,
   B  VARCHAR2(10))
ON COMMIT PRESERVE ROWS
/
 
表が作成されました。

ポイントは、4行目の「ON COMMIT PRESERVE ROWS」の指定です。この指定を追加することで、COMMITしてもデータが消えない一時表となります。

先ほどと同様に、2行INSERTして、COMMIT後に問い合わせしてみましょう。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
INSERT INTO TEMP02 VALUES (1, 'ABC' );
 
1行が作成されました。
 
INSERT INTO TEMP02 VALUES (2, 'DEF' );
 
1行が作成されました。
 
COMMIT ;
 
コミットが完了しました。
 
SELECT * FROM TEMP02;
 
          A B
---------- ----------
          1 ABC
          2 DEF

ご覧のように、COMMITしてもデータは消えていないですね。しかし、データはありますが、一時表のデータはそもそも他のセッションから参照できません。 実際に確かめてみましょう。

<<<<別画面を開きSQL*Plusでscottユーザの別セッションになる>>>>
sqlplus scott/tiger

1
2
3
SELECT * FROM TEMP02;
 
レコードが選択されませんでした。

このように、たとえCOMMITしたデータであっても、一時表の場合は他のセッションから参照できないことが簡単に確認できましたね。

また、一時表のデータが格納される領域は、常に一時表領域となります。普通の表や索引などが格納される永続表領域には一時表データは格納されません。

一時表、いかがでしたか? 簡単な機能ですね。
ちょっとした機能ですが、使い方によってはアプリケーションのロジックを簡素できます。

それでは今回はここまでにいたします。また次回、ご期待ください。

先頭へ戻る