将360,000行导入全局临时表

时间:2016-03-30 16:02:34

标签: sql excel import oracle-sqldeveloper

我在将数字列表导入我创建的全球临时表时遇到了一些问题。

问题:将数据导入全局临时表时,即使有成功的消息提示,也不会在所需的列中显示任何内容。

上一个努力:

我目前正在使用数据导入向导方法来执行此操作。我尝试从.txt导入,但它给了我一个null错误。我尝试从.xlsx导入,但它给了我Java堆空间错误。我尝试将.txt文件重命名为.tsv文件,它说它有效,但没有导入实际数据。下面的图像显示完成,但所需列中的最终结果计数仍为0.

insert progress {
{3}}

我之前尝试过使用SQL Developer在工作表中执行insert语句,但是,我一次只能将大约20,000行insert语句复制并粘贴到工作表中。我不想多次复制和粘贴。但是,这样做会更新表并保留数据。

这个问题现已得到解答。见下文。

1 个答案:

答案 0 :(得分:2)

默认情况下,使用隐式on commit delete子句创建全局临时表:

create global temporary table tblbc (bc number);

Global temporary TABLE created.

select duration from user_tables where table_name = 'TBLBC';

DURATION      
---------------
SYS$TRANSACTION

正如对话消息所述,导入正在提交。这意味着数据随后将从GTT中删除,因为持续时间设置为。这相当于做:

insert into tblbc(bc) values (42);

1 row inserted.

commit;

Commit complete.

select * from tblbc;

no rows selected

如果您重新定义GTT,那么您将能够在提交后看到导入的数据,至少在同一会话中:

drop table tblbc;

Table TBLBC dropped.

create global temporary table tblbc (bc number) on commit preserve rows;

Global temporary TABLE created.

select duration from user_tables where table_name = 'TBLBC';

DURATION      
---------------
SYS$SESSION    

insert into tblbc(bc) values (42);

1 row inserted.

commit;

Commit complete.

select * from tblbc;

        BC
----------
        42

现在,您可以将GTT中的数据与其他表格进行比较,这只是在该会话中。结束会话后,GTT数据将丢失。