我在我的Oracle表中有一个包含1,000,000条记录的表。如何使用SQL Developer为全表数据生成单个插入语句?
我可以使用SQL Developer生成1,000,000个插入语句作为脚本。
但是运行这个脚本需要很多时间。
有什么办法可以为表中的所有值生成1个单一的插入语句,当我知道运行时不会花费那么多时间。
我在我的Oracle表中有一个包含1,000,000条记录的表。如何使用SQL Developer为全表数据生成单个插入语句?
我可以使用SQL Developer生成1,000,000个插入语句作为脚本。
但是运行这个脚本需要很多时间。
有什么办法可以为表中的所有值生成1个单一的插入语句,当我知道运行时不会花费那么多时间。
最简单的方法是创建一个匿名PL/SQL块:
begin
--add 1 million inserts here
commit;
end;
/
这消除了几乎所有的网络的往返。这不是最有效的解决方案,但它是一个简单的改变,非常接近最有效的解决方案。
创建一个很大的匿名块可能会导致像PLS-00123: program too large (Diana nodes)
这样的错误。如果发生这种情况,请将程序分成 小块,然后重试。
有什么办法可以为表中的所有值生成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语句。
我不能使用SQL Developer生成这种类型的语法。我可能需要编辑并从1,000,000个插入语句中删除语法的起始部分 –
之后你想怎么处理你的脚本? – pablomatico
我想运行在另一个数据库的脚本,所有插入将被执行 –