一.Orcal臨時表分類session
1.會話級臨時表:
1).保存一個會話Session的數據。
2).當會話退出時,臨時表數據自動清空。表結構與元數據還存儲在用戶數據字典。
總結:會話級臨時表是指臨時表中的數據只在會話生命週期之中存在,當用戶退出會話結束的時候,Oracle自動清除臨時表中數據。code
2.事務級臨時表:
1).保存一個事務中須要的數據。
2).當事務提交或則回滾的時候,臨時表數據自動清空。表結構與元數據還存儲在用戶數據字典。
總結:事務級臨時表是指臨時表中的數據只在事務生命週期中存在,當事務提交或則回滾的時候,Oracle自動清除臨時表中數據。索引
二.臨時表建立生命週期
1.會話級臨時表進程
1).先建立後插入數據 Create Global Temporary Table Table_Name (Col1 Type1,Col2 Type2...) On Commit Preserve Rows; Insert Into Table_Name Values("",""); 2).建立時直接插入數據 CREATE GLOBAL TEMPORARY TABLE Table_Name ON COMMIT PRESERVE ROWS AS select Col1, Col2 from Query_Table_Name where...;
2.事務級臨時表事務
1).先建立後插入數據 Create Global Temporary Table Table_Name (Col1 Type1,Col2 Type2...) On Commit Delete Rows; Insert Into Table_Name Values("",""); 2).建立時直接插入數據 CREATE GLOBAL TEMPORARY TABLE Table_Name ON COMMIT Delete ROWS AS select Col1, Col2 from Query_Table_Name where...;
三.刪除臨時表it
若是建立臨時表的會話沒有結束,則沒法刪除臨時表,由於臨時表還在使用之中。可是結束會話(關閉建立會話級臨時表的命令窗口)後就能夠刪除了; Drop Table Table_name;
四.刪除時報錯io
描述:關閉原先的命令窗口,而後執行 Drop Table Table_name;
報錯:ORA-14452:試圖建立,更改或刪除正在使用的臨時表中的索引table
1.清空表,而後刪除表 TRUNCATE TABLE test_table; drop table test_table; 2.殺掉進程,而後刪除 SELECT sid, serial# FROM v$session WHERE sid = (SELECT sid FROM v$lock WHERE id1 = (SELECT object_id FROM user_objects WHERE object_name = upper('test_table'))); 若是無權限則執行受權 grant select any dictionary to user; 查詢到該session的sid和serial#: 而後殺掉進程: lter system kill session 'sid,serial#'; 最後進行刪除 drop table test_table;