Oracle兩種臨時表的創建及使用方法


臨時表的概念

 臨時表就是用來暫時保存數據(或者叫中間數據)的一個數據庫對象,它和普通表有些類似,然而又有很大的區別.他只能存儲在臨時表空間,而非用戶的表空間.Oracle臨時表是會話或事物級別的,只對當前會話或事物可見.每個會話只能查看和修改自己的數據.

Oracle數據庫的臨時表可以用來保存一個會話session的數據,或者一個事務中的數據.當查詢語句非常的復雜時,我們就可以創建一個臨時表保存查詢結果,並進行一系列的操作.

創建臨時表

創建臨時表有兩種方式:

  • 事物級臨時表 on commit delete rows; 當commit的時候刪除數據(默認情況)
  • 會話級臨時表 on commit preserve rows; 當commit的時候保留數據
    創建的時候不加關鍵字 默認是事物級臨時表

會話級臨時表

會話級臨時表是指表中的數據只會在會話周期中存在,當用戶退出會話結束時,Oracle自動清除臨時表中當前會話的數據.
執行commit或者rollback操作,表內的數據依然存在,新建一個窗口命令(相當於開啟了一個新的會話),表內的數據就查詢不到了

創建語法:
create global temporary table 臨時表名
( 列名 數據類型,
  ...
)
on commit preserve rows;

事物級臨時表

事物級臨時表是指表中的數據只在事物的生命周期中存在,當事物結束(commit 或 rollback),Oracle自動清除臨時表中的數據,繼承會話臨時表特點

創建語法:
create global temporary table 臨時表名
( 列名 數據類型,
  ...
)
on commit delete rows;
也可以直接:
create global temporary table 臨時表名 as (select結果集);--默認事物級臨時表

注意事項

  • 不建議 lob 對象,但實際應用中確實需要此功能時就無法使用臨時表了.
    CREATE GLOBAL TEMPORARY TABLE TMP_TEST
    ( ID NUMBER ,
    NAME CLOB
    ) ON COMMIT PRESERVE ROWS;
  • 不支持主鍵外鍵
  • 臨時表不能永久的保存數據
  • 臨時表的數據不會備份,恢復,對其的修改也不會有任何的日志信息
  • 臨時表不會有DML鎖
  • 臨時表可以創建臨時的索引,試圖,觸發器
  • 如果要 DROP 會話級臨時表,並且包含數據時,必須先截斷其中的數據,否則會報錯.所有會話都要關閉,或者所有的會話中的數據都為空
  • 命名時以temp_開頭


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM