一个数十万条记录的表A,希望将表A的数据全部导入同样结构的表B,如何做?(单纯的用insert语句是不行的)
解决方案 »
- 编写sql语句
- oracle 9 的服务器,如何禁止客户端访问,但可以在服务器上做EXP导出用户?
- 请教Oracle的基本使用
- ORA-01940: cannot drop a user that is currently connected 错误
- 如何使得我的数据表中的数据按照自己设定的顺序进行存储
- 牛人指点一下新人oracle基础的东西
- 无法使用序列
- 一个非常简单的更新触发器,学习中
- 存储过程游标问题,高手来帮忙啊!
- linux下oracle服務啟動的問題
- 古老的问题,连接Oracle时出错:System.Data.OracleClient requires Oracle client software version 8.1.7 or greater.
- 用java程序往oracle数据库中插入大量的数据,大概有一亿六千万条,如何能提高效率
这样行不?
2.将表a改为B
3.然后将原来的表B的记录插入到现在的表B
数十万条的记录并不算多啊,为什么不可以直接insert ?
commit;
建议用数据库工具,将数据给导成文件,然后在服务器上在import进去保存比较现实。可能你的目的表不在一个库/用户下,或者是不在一个机器上,这样做就比较方便了。
v_rowcount number;
begin
loop
update T_CARCASE_CAR
set CREATED_BY = user,CREATED_DATE=sysdate,UPDATED_BY=user,UPDATED_DATE=sysdate
where CREATED_BY=null or CREATED_DATE=null or UPDATED_BY=null or UPDATED_DATE=null
and rownum<100001;
v_rowcount:=sql%rowcount;
commit;
exit when v_rowcount<10000;
end loop;
end;
/ 上面举个例子可以实现每一万条记录分段commit的功能。
避免所有记录一起修改引起的回滚段不足;并且在过程运行如果遇到什么错误而终止,也已经有一部分数据已经修改成功,再次运行时只需要修改剩下的记录,避免了一起修改时万一出错就前功尽弃的问题。
declare
v_rowcount number;
begin
loop
update T_CARCASE_CAR
set CREATED_BY = user,CREATED_DATE=sysdate,UPDATED_BY=user,UPDATED_DATE=sysdate
where CREATED_BY=null or CREATED_DATE=null or UPDATED_BY=null or UPDATED_DATE=null
and rownum<10001;
v_rowcount:=sql%rowcount;
commit;
exit when v_rowcount<10000;
end loop;
end;
/
中间有个地方写成10万级的了