Oracle 臨時表創建及刪除


Oracle臨時表

臨時表分為兩種

會話級別(ON COMMIT PRESERVE ROWS;

CREATE GLOBAL TEMPORARY <TABLE_NAME> ( <column specification> ) 
ON COMMIT PRESERVE ROWS;

會話級臨時表是指臨時表中的數據只在會話生命周期之中存在,當用戶退出會話結束的時候,Oracle自動清除臨時表中數據。即切換到另外一個窗口查詢時,數據將被清空。

事務級別(ON COMMIT DELETE ROWS;

CREATE GLOBAL TEMPORARY <TABLE_NAME> ( <column specification> ) 
ON COMMIT DELETE ROWS;

用戶提交commit和回滾rollback事務的時候,臨時表的數據自動清空。

創建臨時表時,可以使用TYPE快捷創建,操作如下

CREATE GLOBAL TEMPORARY TABLE TEMP_TABLE OF TYPE_NAME ON COMMIT DELETE ROWS;

刪除臨時表

TRUNCATE TABLE <TABLE_NAME>;
DROP TABLE <TABLE_NAME>;

刪除臨時表時,偶爾會出現ORA-14452的錯誤,意思是有資源還在占用臨時表,無法刪除。需要找到臨時表的會話,手動殺掉。

-- 查找還在使用臨時表的會話

SELECT sid, serial# 
FROM v$session 
WHERE sid = (SELECT sid FROM v$lock 
WHERE id1 = (SELECT object_id  FROM dba_objects 
WHERE object_name = UPPER('臨時表名')));

-- 使用上面查出的sid和serial#,殺掉會話

ALTER system kill session 'sid,serial#';


免責聲明!

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



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