在oracle中,存儲過程的臨時表是一個用于臨時存儲數據的表;當事務或者會話結束的時候,臨時表中的數據就會被數據庫自動清空,臨時表可以根據生命周期的不同分為事務級臨時表和會話級臨時表,創建語法為“create global temporary table 臨時表名 on commit preserve/delete rows”。
本教程操作環境:windows10系統、Oracle 12c版、Dell G3電腦。
oracle存儲過程中的臨時表
臨時表語法:
create?global?temporary?table?臨時表名?on?commit?preserve/delete?rows?? --preserve:SESSION級的臨時表,delete:TRANSACTION級的臨時表.
1. 作用:用來 ‘臨時’ 存儲數據
? ?(1) 當一個事務或會話結束的時候,這個臨時表中的 ‘數據’ 會被數據庫自動清空
? ?(2) 但 ‘表結構’ 依舊保留
2. 分類: ‘生命周期的不同’
? ?(1) 事務級臨時表: on commit delete rows;? ?commit 時 ‘刪除’ 記錄(默認)
? ?(2) 會話級臨時表: on commit preserve rows; commit 時 ‘保存’ 記錄,結束會話時 ‘刪除’ 記錄
3. 注意
? ?(1) 臨時表處理的效率高于普通表
? ? ? ? 不記錄 ‘日志’
? ? ? ? 只能當前用戶使用,不會產生 ‘鎖’
? ?(2) 和普通表操作方式一樣
4. 以下測試中,創建臨時表后,信息查詢
SESSION級的臨時表數據在整個SESSION都存在,直到結束此次SESSION;而TRANSACTION級的臨時表數據在TRANACTION結束后消失,即COMMIT/ROLLBACK或結束SESSION都會清除TRANACTION臨時表數據。?
?當會話退出或者用戶提交commit和回滾rollback事務的時候,臨時表的數據自動清空,但是臨時表的結構以及元數據還存儲在用戶的數據字典中。當一個會話結束(用戶正常退出、用戶不正常退出、ORACLE實例崩潰)或者一個事務結束的時候,Oracle對這個會話的表執行 TRUNCATE 語句清空臨時表數據,但不會清空其它會話臨時表中的數據。臨時表可以使用觸發器。
推薦教程:《Oracle視頻教程》