我有一表CUSTOMER,拥有巨量记录,其中有一字段VALUE:NUMBER(8,4),现要求将原表中所有记录作为新记录插入,除VALUE增加1000外,其余字段值按原表字段值不变,原表中的旧记录保持不变。
   望各位多多指教!力求高效!

解决方案 »

  1.   

    select * from CUSTOMER for update;
      

  2.   

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

  3.   

    insert /*+ append */ into CUSTOMER(a,b,c,...,VALUE) nologging 
    select a,b,c,...,VALUE+1000 from CUSTOMER;
      

  4.   

    但注意+1000之内不得有主key重复!!!
      

  5.   

    好你个‘ sasacat(傻傻猫)’又碰到你了,我这几天没留意你加了一个角了。
    我追...
      

  6.   

    sasacat(傻傻猫):我不太明白你说的方法,能否解释一下?
      

  7.   

    licsth():我也不太明白你说的方法,能否解释一下?
      

  8.   

    我的旧记录的VALUE字段不要加1000,保持不变。
      

  9.   

    没法再明白了,按照我的sql执行一下就行了:
    INSERT  INTO CUSTOMER 
       (.., VALUE, ..,...)   (SELECT .., VALUE+1000, ..,...from CUSTOMER  )
    你不是要我说明...吧,是你要插入那张表的其他字段。
      

  10.   

    “....,除VALUE增加1000外,其余字段值按原表字段值不变,原表中的旧记录保持不变。”
    楼主什么意思吗?又说:“我的旧记录的VALUE字段不要加1000,保持不变。”明显矛盾啊!
      

  11.   

    licsth() 你的并不算高效啊。还是要记录日志。我的就是真正高效了,...加了 nologging 关键字,以保证不记录在日志里然后提示了/*+ append */表示这是增加数据
      

  12.   

    我的意思就是:
       假设我表原来有三条记录:
    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
      

  13.   

    我没什么高招,就插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;
      

  14.   

    刚才漏了一点,重新写过:
    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;
      

  15.   

    我写的本来就是这个意思啊,放心地用吧....
    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;
    也是一样
      

  16.   

    学习===============================
        CSDN小助手 是一款脱离浏览器也可以使用csdn论坛的
    软件!
        界面: http://qqwwee.com/
        下载: http://qqwwee.com/csdn.rar 包含源代码