【TEMPORARY TABLE】Oracle兩種臨時表型別功能特點比較

secooler發表於2011-06-06
  Oracle的臨時表可以是基於事務的,也可以是基於會話的。本文就Oracle的這兩種型別的臨時表做一個簡單介紹和比較。

1.基於事務的臨時表
1)語法
CREATE GLOBAL TEMPORARY TABLE ON COMMIT DELETE ROWS;

2)特點
當事務提交後,臨時表中的資料會被自動刪除。

3)建立基於事務的臨時表並測試臨時表特點
(1)建立基於事務的臨時表
sec@ora10g> create global temporary table t_temp_transaction (x int) on commit delete rows;

Table created.

(2)初始化並檢視臨時表資料
sec@ora10g> insert into t_temp_transaction values (1);

1 row created.

sec@ora10g> select * from t_temp_transaction;

         X
----------
         1

(3)提交
sec@ora10g> commit;

Commit complete.

(4)再次檢視臨時表資料
sec@ora10g> select * from t_temp_transaction;

no rows selected

可見臨時表中的資料隨commit語句提交而被刪除。

2.基於會話的臨時表
1)語法
CREATE GLOBAL TEMPORARY TABLE ON COMMIT PRESERVE ROWS;

2)特點
當事務提交後,記錄會一直儲存在表中,直到會話斷開或使用DELETE和TRUNCATE語句刪除臨時表中的記錄。

3)建立基於會話的臨時表並測試臨時表特點
(1)建立基於會話的臨時表
sec@ora10g> create global temporary table t_temp_session (x int) on commit preserve rows;

Table created.

(2)初始化並檢視臨時表資料
sec@ora10g> insert into t_temp_session values (2);

1 row created.

sec@ora10g> select * from t_temp_session;

         X
----------
         2

(3)提交
sec@ora10g> commit;

Commit complete.

(4)再次檢視臨時表資料
sec@ora10g> select * from t_temp_session;

         X
----------
         2

在基於會話的臨時表中的資料並沒有隨commit提交而刪除。

(5)在新會話中檢視臨時表資料
sec@ora10g> conn sec/sec
Connected.
sec@ora10g> select * from t_temp_session;

no rows selected

在重新開啟的會話中基於會話的臨時表中的資料已經被清空。

3.小結
  無論是基於事務的,也可以是基於會話的Oracle臨時表,都有各自的應用場景,重點考察的是臨時表在應用中功能和需要保留資料的週期。

Good luck.

secooler
11.06.06

-- The End --

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/519536/viewspace-700899/,如需轉載,請註明出處,否則將追究法律責任。

相關文章