求插入大量记录的高效方法? 我有一表CUSTOMER,拥有巨量记录,其中有一字段VALUE:NUMBER(8,4),现要求将原表中所有记录作为新记录插入,除VALUE增加1000外,其余字段值按原表字段值不变,原表中的旧记录保持不变。 望各位多多指教!力求高效! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 select * from CUSTOMER for update; INSERT INTO CUSTOMER (.., VALUE, ..,...) (SELECT .., VALUE+1000, ..,...from CUSTOMER ) insert /*+ append */ into CUSTOMER(a,b,c,...,VALUE) nologging select a,b,c,...,VALUE+1000 from CUSTOMER; 但注意+1000之内不得有主key重复!!! 好你个‘ sasacat(傻傻猫)’又碰到你了,我这几天没留意你加了一个角了。我追... sasacat(傻傻猫):我不太明白你说的方法,能否解释一下? licsth():我也不太明白你说的方法,能否解释一下? 我的旧记录的VALUE字段不要加1000,保持不变。 没法再明白了,按照我的sql执行一下就行了:INSERT INTO CUSTOMER (.., VALUE, ..,...) (SELECT .., VALUE+1000, ..,...from CUSTOMER )你不是要我说明...吧,是你要插入那张表的其他字段。 “....,除VALUE增加1000外,其余字段值按原表字段值不变,原表中的旧记录保持不变。”楼主什么意思吗?又说:“我的旧记录的VALUE字段不要加1000,保持不变。”明显矛盾啊! licsth() 你的并不算高效啊。还是要记录日志。我的就是真正高效了,...加了 nologging 关键字,以保证不记录在日志里然后提示了/*+ append */表示这是增加数据 我的意思就是: 假设我表原来有三条记录: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 我没什么高招,就插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; 刚才漏了一点,重新写过: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; 我写的本来就是这个意思啊,放心地用吧....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;也是一样 学习=============================== CSDN小助手 是一款脱离浏览器也可以使用csdn论坛的软件! 界面: http://qqwwee.com/ 下载: http://qqwwee.com/csdn.rar 包含源代码 建索引语句被中断,空间无故丢失,为何? Oracle Linux环境下,大数据量的导入! 如何多次获取查询数据库的时间总和?----------------- 求大神赐予一条SQL 如何保留指定位数的小数? 请教一个sql问题高手请进 什么方法都是ORA-27102: out of memory 怎样用原来的数据文件恢复数据? 急急!ORACLE数据库中服务器与客户的问题! 散分喽 关于 PL/SQL 数组 清空(初始化) 如何能够从动态SQL中返回新记录ROWID的值呢?
(.., VALUE, ..,...) (SELECT .., VALUE+1000, ..,...from CUSTOMER )
select a,b,c,...,VALUE+1000 from CUSTOMER;
我追...
INSERT INTO CUSTOMER
(.., VALUE, ..,...) (SELECT .., VALUE+1000, ..,...from CUSTOMER )
你不是要我说明...吧,是你要插入那张表的其他字段。
楼主什么意思吗?又说:“我的旧记录的VALUE字段不要加1000,保持不变。”明显矛盾啊!
假设我表原来有三条记录:
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
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;
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;
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;
也是一样
CSDN小助手 是一款脱离浏览器也可以使用csdn论坛的
软件!
界面: http://qqwwee.com/
下载: http://qqwwee.com/csdn.rar 包含源代码