一.Orcal臨時表分類
1.會話級臨時表:
1).保存一個會話Session的資料,
2).當會話退出時,臨時表資料自動清空,表結構與元資料還存盤在用戶資料字典,
總結:會話級臨時表是指臨時表中的資料只在會話生命周期之中存在,當用戶退出會話結束的時候,Oracle自動清除臨時表中資料,
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...;
三.洗掉臨時表
如果創建臨時表的會話沒有結束,則無法洗掉臨時表,因為臨時表還在使用之中,但是結束會話(關閉創建會話級臨時表的命令視窗)后就可以洗掉了;
Drop Table Table_name;
四.洗掉時報錯
描述:關閉原先的命令視窗,然后執行 Drop Table Table_name;
報錯:ORA-14452:試圖創建,更改或洗掉正在使用的臨時表中的索引
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;
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/308503.html
標籤:Oracle
上一篇:[20210722]sqlplus下show recycebin的小問題.txt
下一篇:18Oracle入門
