求插入大量记录的高效方法?

qiujin 2005-09-27 03:16:55
我有一表CUSTOMER,拥有巨量记录,其中有一字段VALUE:NUMBER(8,4),现要求将原表中所有记录作为新记录插入,除VALUE增加1000外,其余字段值按原表字段值不变,原表中的旧记录保持不变。
望各位多多指教!力求高效!
...全文
185 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
Qqwwee_Com 2005-09-27
  • 打赏
  • 举报
回复
学习

===============================
CSDN小助手 是一款脱离浏览器也可以使用csdn论坛的
软件!
界面: http://qqwwee.com/
下载: http://qqwwee.com/csdn.rar 包含源代码
sasacat 2005-09-27
  • 打赏
  • 举报
回复
我写的本来就是这个意思啊,放心地用吧....
insert /*+ append */ into CUSTOMER nologging
select name,VALUE+1000,age from CUSTOMER;
或者
insert /*+ append */ into CUSTOMER(name,VALUE,age )
select name,VALUE+1000,age from CUSTOMER;
也是一样
laofang 2005-09-27
  • 打赏
  • 举报
回复
刚才漏了一点,重新写过:
insert /*+ append */ into CUSTOMER nologging
select /*+ parallel(old,8) */ * from CUSTOMER_OLD old;

insert /*+ append */ into CUSTOMER(a,b,c,...,VALUE) nologging
select /*+ parallel(old,8) */ a,b,c,...,VALUE+1000 from CUSTOMER_OLD old;
laofang 2005-09-27
  • 打赏
  • 举报
回复
我没什么高招,就插2次;在sasacat(傻傻猫) 的基础上再加上并行处理,速度会快一些:
insert /*+ append */ into CUSTOMER nologging
select /*+ parallel(a,8) */ * from CUSTOMER;

insert /*+ append */ into CUSTOMER(a,b,c,...,VALUE) nologging
select /*+ parallel(a,8) */ a,b,c,...,VALUE+1000 from CUSTOMER;
qiujin 2005-09-27
  • 打赏
  • 举报
回复
我的意思就是:
假设我表原来有三条记录:
NAME VALUE AGE
张三 2900 26
李四 3500.99 34
王五 8709 38
通过插入记录后,表中记录为:
NAME VALUE AGE
张三 2900 26
李四 3500.99 34
王五 8709 38
张三 3900 26
李四 4500.99 34
王五 9709 38
sasacat 2005-09-27
  • 打赏
  • 举报
回复
licsth() 你的并不算高效啊。还是要记录日志。

我的就是真正高效了,...加了 nologging 关键字,以保证不记录在日志里

然后提示了/*+ append */表示这是增加数据
小李木耳 2005-09-27
  • 打赏
  • 举报
回复
你说的不是要加1000行吧?那也得符合逻辑呀,按照你阐述的,真是不明白。
小李木耳 2005-09-27
  • 打赏
  • 举报
回复
“....,除VALUE增加1000外,其余字段值按原表字段值不变,原表中的旧记录保持不变。”
楼主什么意思吗?又说:“我的旧记录的VALUE字段不要加1000,保持不变。”明显矛盾啊!
小李木耳 2005-09-27
  • 打赏
  • 举报
回复
没法再明白了,按照我的sql执行一下就行了:
INSERT INTO CUSTOMER
(.., VALUE, ..,...)

(SELECT .., VALUE+1000, ..,...from CUSTOMER )


你不是要我说明...吧,是你要插入那张表的其他字段。
qiujin 2005-09-27
  • 打赏
  • 举报
回复
我的旧记录的VALUE字段不要加1000,保持不变。
qiujin 2005-09-27
  • 打赏
  • 举报
回复
licsth():我也不太明白你说的方法,能否解释一下?
qiujin 2005-09-27
  • 打赏
  • 举报
回复
sasacat(傻傻猫):我不太明白你说的方法,能否解释一下?
小李木耳 2005-09-27
  • 打赏
  • 举报
回复
好你个‘ sasacat(傻傻猫)’又碰到你了,我这几天没留意你加了一个角了。
我追...
qiujin 2005-09-27
  • 打赏
  • 举报
回复
望大家说的详细、清楚点。谢谢!
小李木耳 2005-09-27
  • 打赏
  • 举报
回复
但注意+1000之内不得有主key重复!!!
sasacat 2005-09-27
  • 打赏
  • 举报
回复
insert /*+ append */ into CUSTOMER(a,b,c,...,VALUE) nologging
select a,b,c,...,VALUE+1000 from CUSTOMER;
小李木耳 2005-09-27
  • 打赏
  • 举报
回复
INSERT INTO CUSTOMER
(.., VALUE, ..,...)

(SELECT .., VALUE+1000, ..,...from CUSTOMER )
jessica_zz 2005-09-27
  • 打赏
  • 举报
回复
select * from CUSTOMER for update;

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧