ORACLE、DB2臨時表簡介

ORACLE

ORACLE臨時表有兩種類型:會話級的臨時表和事務級的臨時表。
1)
CREATE GLOBAL TEMPORARY <TABLE_NAME> (<column specification>)
ON COMMIT DELETE ROWS;
CREATE GLOBAL TEMPORARY TABLE <TABLE_NAME>;
它是臨時表的默認參數,這種類型的臨時表與事務有關,當進行事務提交或者事務回滾的時候,臨時表的數據將自行截斷,即當COMMIT或ROLLBACK時,臨時表的暫時段將被自動截斷(TRUNCATE),但是臨時表的結構以及元數據還存儲在用戶的數據字典中。如果臨時表完成它的使命後,最好刪除臨時表,否則數據庫會殘留臨時表的表結構和元數據。
2)
CREATE GLOBAL TEMPORARY <TABLE_NAME> (<column specification>)
ON COMMIT PRESERVE ROWS;
它表示臨時表的內容可以跨事物而存在,當前SESSION不退出的情況下,臨時表中的數據會一直存在,臨時表的數據只有在當前SESSION退出的時候才被截斷(TRUNCATE TABLE)。但是臨時表的結構以及元數據還存儲在用戶的數據字典中。
3)臨時表只對當前會話或事務可見。每個會話只能查看和修改自己的數據。

注意事項:

1)臨時表可以創建臨時的索引、視圖、觸發器。
2)如果要DROP會話級別的臨時表,並且臨時表中包含數據時,必須先截斷其中的數據,否則會報錯。
 > TRUNCATE TABLE TMP_TEST;
 > DROP TABLE TMP_TEST PURGE;
在ORACLE中,應用程序需要的臨時表應該在程序安裝時創建,而不是在程序運行時創建。(這是與ms sqlserver或sybase的使用的不同)
臨時表在數據庫中只需創建一次,不必在每個存儲過程中創建一次。臨時表總是存在的,除非手動的刪除它。臨時表作爲對象存在數據字典中,並且總是保持爲空,直到有會話在其中放入數據。

DB2

可使用 DECLARE GLOBAL TEMPORARY TABLE 語句來定義臨時表。
定義了臨時表後,我們可以像使用普通表一樣使用臨時表。臨時表只對定義它的用戶有效,不同用戶可以在同一時間定義同名的臨時表,他們之間互不影響。臨時表的生命週期是當前SESSION,當SESSION關閉時,臨時表將自動刪除,這也是臨時表的模式名只能爲SESSION的原因。此外,我們還可以給臨時表定義索引。

可以通過以下三種方式定義臨時表:

--方法1: 
DECLARE GLOBAL TEMPORARY TABLE SESSION.EMP (<column specification>)
ON COMMIT DELETE ROWS;   
--方法2: 
DECLARE GLOBAL TEMPORARY TABLE SESSION.EMP 
LIKE STUDENTTABLEINCLUDING COLUMN DEFAULTS 
WITH REPLACE 
ON COMMIT PRESERVE ROWS; 
--方法3: 
DECLARE GLOBAL TEMPORARY TABLE SESSION.EMP AS 

   SELECT * FROM STUDENTTABLE WHERE<condition> 

DEFINITION ONLY WITH REPLACE;  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章