2015-07-20 66 views
2

我在我的Oracle表中有一个包含1,000,000条记录的表。如何使用SQL Developer为全表数据生成单个插入语句?

我可以使用SQL Developer生成1,000,000个插入语句作为脚本。

但是运行这个脚本需要很多时间。

有什么办法可以为表中的所有值生成1个单一的插入语句,当我知道运行时不会花费那么多时间。

+1

之后你想怎么处理你的脚本? – pablomatico

+0

我想运行在另一个数据库的脚本,所有插入将被执行 –

回答

1

最简单的方法是创建一个匿名PL/SQL块:

begin 
    --add 1 million inserts here 
    commit; 
end; 
/

这消除了几乎所有的网络的往返。这不是最有效的解决方案,但它是一个简单的改变,非常接近最有效的解决方案。

创建一个很大的匿名块可能会导致像PLS-00123: program too large (Diana nodes)这样的错误。如果发生这种情况,请将程序分成 小块,然后重试。

0

有什么办法可以为表中的所有值生成1个单一插入语句,当我知道运行时不会花费那么多时间。

你可以使用INSERT ALL声明。

INSERT ALL语句用于使用单个INSERT语句添加多行。只能使用一条SQL命令将行插入一个表或多个表中。

例如,

INSERT ALL 
    INTO suppliers (supplier_id, supplier_name) VALUES (1000, 'IBM') 
    INTO suppliers (supplier_id, supplier_name) VALUES (2000, 'Microsoft') 
    INTO suppliers (supplier_id, supplier_name) VALUES (3000, 'Google') 
SELECT * FROM dual; 

这相当于3 INSERT语句。

+1

我不能使用SQL Developer生成这种类型的语法。我可能需要编辑并从1,000,000个插入语句中删除语法的起始部分 –