小弟有需要要把一有200W条的数据导入Oracle数据库,但是前面有人设计的时候这个表是有表自增字段的,使用了触发器。无论是我使用Pl/SQL还是Sqlldr都面临一个问题,那就是ID不能为空的问题,而且是要在原来的ID后面往后加一。数据库中表的字段大致如下(虚拟的):
id name age 
我要的文本中只有name的值,如
aa
bb
cc
...我遇到的困难就是解决ID不为空且自增的问题,请朋友多多指教,谢谢了。

解决方案 »

  1.   

    直接把原来更新;
    update tb a set id=(select rn from (select rownum rn,name from tb)b where a.name=b.name)
      

  2.   

    定义个sequence:
    create sequence my_sequence start with 33333;然后使用类似如下的控制文件:LOAD DATA
      INFILE 'xx.txt
      APPEND
      INTO TABLE mailing_list
      FIELDS TERMINATED BY ","
      (rec_no "my_sequence.nextval",
      ...
      ..
      )
      

  3.   

     oracledbalgtu 你好,定义的Sequence要放在哪里呢?
      

  4.   


    load data
    infile 'relation.csv'
    append into table loadertest
    fields terminated by " "
    TRAILING NULLCOLS
     (cardcode,state,id "seq_loadertest.nextval")注意导入的时候列的位置create sequence SEQ_LOADERTEST
    minvalue 1
    maxvalue 9999999999
    start with 1
    increment by 1
    cache 20;表结构create table LOADERTEST
    (
      ID       NUMBER not null,
      CARDCODE VARCHAR2(100),
      STATE    VARCHAR2(100)
    )