我创建了一个临时表,我正在从另一个表中检索数据并将其插入此临时表。之后我想创建另一个临时表并从前一个临时表中插入一些数据。
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语句后,它为空。我不明白为什么!
答案 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全局临时表中是永久对象,它们通常不应该是即时创建的。