2

我正在使用 SQL Developer 并且正在使用全局临时表。问题是当我结束会话时临时表没有完全删除。在打开一个新会话时,所有“临时”表都列在我的模式下(它们不包含数据,只显示列是什么,它们有一个带 x 的灰色圆圈)。

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

或者更好的是,在我的会话期间删除表格的方法?(如果我尝试这样做,我会收到错误消息“尝试在已使用的临时表上创建、更改或删除索引。”)

谢谢你!

4

2 回答 2

1

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

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

我不得不手动删除每个表,这非常耗时。

您不必删除它们 - 这就是全局临时表的全部意义所在。

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

或者更好的是,在我的会话期间删除表格的方法?

你不需要那个。把它们放在身边并使用它们。

于 2014-11-18T15:37:55.520 回答
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 操作,因此在此操作之前发生的任何事情都将被提交。

于 2014-11-18T20:05:58.050 回答