1. 程式人生 > 其它 >ORCAL 臨時表建立,刪除

ORCAL 臨時表建立,刪除

一.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#';
最後進行刪除