在Oracle中使用大型静态数据批量插入

时间:2012-08-09 07:38:45

标签: oracle bulkinsert bulk bulk-load

我有一个包含一列数字的简单表格。我想加载大约3000个数字。我想在内存中这样做,而不使用SQL * Loader。我试过了

INSERT ALL
   INTO t_table (code) VALUES (n1)
   INTO t_table (code) VALUES (n2)
   ...
   ...
   INTO t_table (code) VALUES (n3000)
SELECT * FROM dual

但我失败了1000个值。我该怎么办 ? SQL * Loader是唯一的方法吗?我可以只用SQL做LOAD吗?

1 个答案:

答案 0 :(得分:2)

据推测,您的初始值为n。如果是,则此代码会将code填充为值nn+2999

insert into t_table (code)
select (&N + level ) - 1
from dual
connect by level <=3000 

此查询使用SQL * Plus替换变量发布n的初始值。其他客户需要以不同的方式传递价值。


  

“假设我使用stl :: vector在c ++中,我应该查询什么   写?“

所以当你写n3000时,你真正想要的是n(3000)。在SQL中使用数组很容易。此示例使用Oracle的预定义集合之一,类型为NUMBER的表:

declare 
    ids system.number_tbl_type; 
begin
    insert into t_table (code)
    select column_value
    from table ( select ids from dual )
    ; 
end;

至于将C ++向量映射到Oracle类型,这是一个不同的问题(也是我无法回答的问题)。