有个语句块,逻辑挺简单,就是往一张表中插入几条数据,但是基数很大,具体语句如下
declare i int:=13900000000;
begin
loop
insert into users_mobile(mobile,create_time) values(to_char(i),sysdate);
exit when i=1390000010;
i:=i+1;
end loop;
end;
语句执行的时候,非常慢,执行了8分钟左右还执行部完,只好手动停止了。
如果基数改的比较小,那速度很快,请问这个问题怎么解决?
declare i int:=13900000000;
begin
loop
insert into users_mobile(mobile,create_time) values(to_char(i),sysdate);
exit when i=1390000010;
i:=i+1;
end loop;
end;
语句执行的时候,非常慢,执行了8分钟左右还执行部完,只好手动停止了。
如果基数改的比较小,那速度很快,请问这个问题怎么解决?
exit when i=1390000010;
13900000000
1390000010
这怎么会退出啊?
你就是换个再牛逼的机器,也执行不完
你把赋值语句改小一下再试试。
用SEQUENCE就不用循环了, insert into .... select SEQUENCE.next_val as seq_Val,....
where seq_Val> 13900000000 and seq_Val <= 13900009999
1:做分批插入,每插入N条之后提交事物;
2:insert语句可以如此写:insert /*+ APPEND */ ,可以减少归档日志;