一.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;