在SQL Developer中删除临时表

时间:2014-11-18 15:27:37

标签: oracle drop-table

我正在使用SQL Developer并正在使用Global Temporary Tables。问题是当我结束会话时临时表没有完全丢弃。在打开新会话时,所有"临时"表格列在我的架构下(它们不包含数据,只显示列的内容,并且它们带有带x的灰色圆圈)。

我不得不手动删除每张桌子,这非常耗时。 SQL开发人员中是否有设置或快速代码以在每次会话后永久删除临时表?

或者更好的是,在我的会话期间放弃桌子的方法? (如果我尝试这个,我会收到错误"尝试在已经使用的临时表上创建,更改或删除索引。")

谢谢!

2 个答案:

答案 0 :(得分:1)

这就是全局临时表在Oracle中的工作方式。

它们始终存在(例如在系统目录中),您只需要创建一次(不是每次都使用它们)。

  

我不得不手动删除每张桌子,这非常耗时。

您不必删除它们 - 这就是全局临时表的重点。

每个会话在该表中都有自己的数据副本。提交或断开时,数据被“删除”(取决于您创建GTT的方式)。

  

或者更好的是,在会话期间放弃桌子的方法是什么?

你不需要那个。只需保留它们并使用它们。

答案 1 :(得分:1)

不考虑删除和重新创建临时表的问题,这里有一个删除模式中所有临时表的脚本:

begin
for x in (select 'drop table ' || table_name || '' s from user_tables
      where temporary = 'Y') 
loop
execute immediate x.s;
end loop;
end;
/

如果您使用某些前缀,您可以添加它以避免丢弃有用的内容:

begin
for x in (select 'drop table ' || table_name || '' s from user_tables
      where temporary = 'Y'
      and table_name like 'dropme%') 
loop
    execute immediate x.s;
end loop;
end;
/

请记住,创建/删除临时表是DDL操作,因此在此操作之前发生的任何事情都将被提交。