日期:2014-05-16  浏览次数:20722 次

我有一个30W条的SQL脚本,怎么执行。
因为要大量数据测试,根据目前生成的数据,生成新的数据。根据要求生成了30W条的插入语句,由于数据量大,怎么插入比较快。比较合理,有经验的,大家一起讨论。

------解决方案--------------------
方法一:
INSERT /*+Append*/ INTO  tab1
    SELECT * FROM tab2;

方法二:假如TAB1表中的没有数据的话,先把原表DROP掉,然后在CREATE AS,比如:
DROP TABLE TAB1;
CREATE TABLE TAB1 AS SELECT * FROM TAB2;
然后在此基础上建立索引。

更多方法,请参考:http://blog.csdn.net/tianlesoftware/article/details/4745144
------解决方案--------------------
30W
就算用PL/SQL自带工具的话,10分钟内也完成了吧
------解决方案--------------------
引用:
方法一:
INSERT /*+Append*/ INTO  tab1
    SELECT * FROM tab2;

方法二:假如TAB1表中的没有数据的话,先把原表DROP掉,然后在CREATE AS,比如:
DROP TABLE TAB1;
CREATE TABLE TAB1 AS SELECT * FROM TAB2;
然后在此基础上建立索引。

更多方法,请参考:http://blog.csdn.net/tianlesoftware/article/details/4745144


这招行得通!
------解决方案--------------------
可以每隔几万行执行一个commit.要不redo表空间太大了
------解决方案--------------------
引用:
不是这样的,假如一个商品A,A商品有供应商1,供应商2,供应商3,供应......,我想生成10000个商品,当然也要生成这些商品所对应的供应商。现在我已经生成了SQL语句,太大了,大约30W条SQL语句
例如
insert into product select 100(自动编号ID),‘proudctidB’,...... from product where productid='A';
insert into Supplier select 101(自动编号ID),‘SupplierB' ,...... from product where SupplierID='A';

.....................

insert into product select 100(自动编号ID),‘proudctidB’,...... from product where productid='N';
insert into Supplier select 101(自动编号ID),‘SupplierB' ,...... from product where SupplierID='N';
我要怎么运行是最佳的,写个程序,还是直接在PL/SQL中运行?

先把要插入表的索引去掉,还可以加append提示,但不建议,
做成sql文件直接在sqlplus命令行执行@xxx.sql就行了
------解决方案--------------------
如果没有数据的话用二楼的第二种方法应该是最快的。如果需要根据主键关联的话可以考虑直接用UPDATE,我之前做一个一百万条数据的表的数据修改,直接等值连接的update也就一分多钟,中间没有什么计算的过程。