unique index primary key

解决方案 »

  1.   

    我也有同样的问题,如果在存储过程中做,设置了unique index后,碰到违反unique规则的插入出错后,能让录入循环继续吗?我一次有百多万条记录要处理啊!
    我现在还好只有一个独立的job在处理这些记录,采用对目的表进行的not exists查询,150万条左右的记录要1个半小时左右,有没有办法更快?或好算法的建议!
      

  2.   

    插入记录少的操作,应该用主键,速度没什么影响一次大批量数据操作,仍然用主键,不过在过程中用显式游标处理数据:
    FOR I IN CURSOR_NAME
    LOOP
    BEGIN
    ....
    EXCEPTION
    WHEN OTHERS THEN   
    NULL;
    END;
    END LOOP;
    在循环内部捕捉异常,跳过继续执行.OTHERS 也可以换成具体的预定义错误
    不过速度我没试过
    试试看吧
      

  3.   

    用Unique Index来解决.
    在程序中处理例外.在存储过程中,处理的方法如下:
    //程序开始了
    .
    .
    //插入语句
    Begin
      Insert Into ...
      when others 
       ...
    End
    //程序继续
    ...
    这样,出现违反unique规则的插入不会中继整个的处理。
    --------------
    采用目的查询的办法,与采用unique一样,但还要更慢一些。因为你自己做的方法,无论如何也比不上Oracle自己的处理快。