先建立一个和它结构相同的临时表
然后用SQLloader将文本数据导入到临时表
再进行更新和插入操作~~

解决方案 »

  1.   

    不知道control文件里,用replace是不是能满足楼主的要求~(这个偶没用过,偶一般用truncate和append)如果可以的话,临时表就不用创了,第3步也可以省了
      

  2.   

    8过偶觉得,还是用一下临时表比较好~~
    虽然会慢一些,但为了保证安全性,因为你的原表里也有很多数据~~SQLloader是直接写入数据文件,而不使用回滚段的
    即是说:SQLloader写入数据是没办法rollback的
      

  3.   

    为什么不可以用UTL_FILE来得到数据,然后插入到数据表中
      

  4.   

    sqlloader external table不就行了?
      

  5.   

    先把数据导入一个临时表,然后在写代码update data
      

  6.   

    回复人: linglmf() ( ) 信誉:100  2003-09-26 17:45:00  得分:0 
     
     
      为什么不可以用UTL_FILE来得到数据,然后插入到数据表中
      
     
    utl_file包读文件有弊端的:
    1:文件必须在数据库服务器上
    2:utl_file读文件必须一行一行的读,小文件还可以
       但象楼主说的100万条数据的文件,读取速度是你所无法接受的
      

  7.   

    一定要UTL_FILE做?
    create or replace procedure test as
      f  UTL_FILE.file_type;
      s  varchar2(200);
      a  varchar2(200);
      path varchar2(50);
    begin
      path:='c:';
      f:=utl_file.fopen('c:','aa.CSV','R');
     loop
        utl_file.get_line(f,s);
        N:=INSTR(S,',',1,1);
        a := substr(s,.....)
        select count(*) into i from aa where aa = a;
        if i > 0 then
          update .... set ...
        else
          insert into .....
        end if;
      end loop;
      utl_file.fclose(f);
      COMMIT;
    EXCEPTION
      when NO_DATA_FOUND then
        utl_file.fclose(f);
      rollback;
    end;
    /
    写到这里自己修改一吧。
      

  8.   

    9i新增功能,可以把文件设成外部表,插入到oraclehttp://download-west.oracle.com/docs/cd/B10501_01/server.920/a96540/statements_58a.htm
      

  9.   

    to xinpingf(白开心)  LGQDUCKY(飘) tcmis(肖锋)  beckhambobo(beckham) Thanks!
    我这个更新程序每天要运行一次,做法是不是这样:先把文件数据导入到临时表,然后再作一个存储过程让临时表和正式表比较,进行更新和插入操作。拜托各位存储过程该怎么写,因为我一直用mysql。谢谢各位!