突然消失的临时表中的数据

时间:2016-08-03 15:42:47

标签: oracle

我创建了一个临时表,我正在从另一个表中检索数据并将其插入此临时表。之后我想创建另一个临时表并从前一个临时表中插入一些数据。

create global temporary table TEMP(
           Col NUMBER);
insert into TEMP select COL from Table1 where COL = 1 commit;
select * from TEMP;
create global temporary table TEMP_2 (Col NUMBER);
select * from TEMP;

首先,它显示数据已插入TEMP表中,然后在我创建第二个表并在TEMP表上执行第二个SELECT语句后,它为空。我不明白为什么!

1 个答案:

答案 0 :(得分:2)

默认情况下,使用属性"在删除提交行"上创建全局临时表。当您创建另一个表时,Oracle会执行隐式提交,因此会删除第一个表中的数据。

您可以通过将第一个表创建为:

来更改此设置
create global temporary table TEMP(
       Col NUMBER) on commit preserve rows;

或者你可以重新安排你的陈述:

create global temporary table TEMP(
           Col NUMBER);
create global temporary table TEMP_2 (Col NUMBER);

insert into TEMP select COL from Table1 where COL = 1 commit;
select * from TEMP;
select * from TEMP;

请记住,在Oracle全局临时表中是永久对象,它们通常不应该是即时创建的。

相关问题