Oracle臨時表就像它的名字同樣,主要是用於臨時的用途。它主要用來存儲中間數據。對於不一樣的用戶,表的數據是隔離的並在用戶提交或者斷開會話自動TRUNCATE。工具
Oracle臨時表分爲會話級和事務級兩種。設計
1)ON COMMIT DELETE ROWS
事務級的臨時表,這種類型的臨時表與事務有關,當進行事務提交或者事務回滾的時候,臨時表的數據將自行截斷,即當COMMIT或ROLLBACK時,數據就會被TRUNCATE掉。
2)ON COMMIT PRESERVE ROWS
會話級的臨時表,它和你當前會話有關係,當前SESSION不退出的狀況下,臨時表中的數據就還存在,臨時表的數據只有當你退出當前SESSION的時候才被TRUNCATE 。對象
會話級的臨時表索引
【語法】事務
Create Global Temporary Table Table_Name it
(the aggregation SQL statement) On Commit Preserve Rows; io
事務級的臨時表 效率
【語法】import
Create Global Temporary Table Table_Name 基礎
(the aggregation SQL statement) On Commit Delete Rows;
【臨時表的特色】
臨時表數據自動清空後,可是臨時表的結構以及元數據還存儲在用戶的數據字典中。表的定義對全部的會話可見。
臨時表不須要DML鎖。
能夠索引臨時表和在臨時表基礎上創建視圖。
在臨時表上的索引也是臨時的,也是隻對當前會話或者事務有效。
臨時表能夠擁有觸發器。
能夠用export和import工具導入導出臨時表的定義,可是不能導出數據。
【臨時表適用場合】
當某一個SQL語句多表關聯,而且和一些小表關聯。能夠採用將大表進行分拆而且獲得比較小的結果集合存放在臨時表中。
【不足】
不支持lob對象,這也許是設計者基於運行效率的考慮,但實際應用中確實須要此功能時就沒法使用臨時表了。
不支持主外鍵關係。
with句
準確的說with語句不叫臨時表,但它與臨時表使用概念上很是接近,一樣列出。
【語法】
WITH
subquery_name
AS
(the aggregation SQL statement)
SELECT
(query naming subquery_name);
用WITH在須要重複查詢相同的結果集時常用,用於WITH能夠使得一次查詢多處使用。【如需轉載請註明出處】