首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

深度解析 Oracle 全域臨時表特性與最佳實踐

     編輯:Oracle 資料庫相關知識

全域臨時表 (GTT) 建立語法

CREATE GLOBAL TEMPORARY TABLE table_name
( column datatype [DEFAULT expr] [NULL | NOT NULL], ... )
ON COMMIT { DELETE | PRESERVE } ROWS;

兩種生命週期模式

  • ON COMMIT DELETE ROWS:事務級,提交或回滾自動清空
  • ON COMMIT PRESERVE ROWS:會話級,斷開連線自動清空

多使用者並行互不干擾,甚至鎖定臨時表也不會阻塞其他會話使用各自的臨時段。

從 SQL Server 遷移的關鍵差異

SQL Server 習慣 SELECT ... INTO #temp FROM ... 執行期建表,Oracle 嚴禁運行期 DDL(資源消耗極大、產生大量字典物件)。正確做法:

  1. 應用部署階段一次性建立所有 GTT,像永久表一樣管理
  2. 運行時僅需 INSERT INTO gtt SELECT ... FROM ...
  3. GTT 永遠存在於數據字典,空表不佔用儲存,會話寫入才分配臨時段

隱患警示

若在存儲過程中反覆 CREATE GLOBAL TEMPORARY TABLE,每次調用都會在字典新增一個物件,長期運行導致字典膨脹、解析變慢、甚至 ORA-00600。若不手動 DROP,殘留物件永久駐留。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved