插入记录少的操作,应该用主键,速度没什么影响一次大批量数据操作,仍然用主键,不过在过程中用显式游标处理数据: FOR I IN CURSOR_NAME LOOP BEGIN .... EXCEPTION WHEN OTHERS THEN NULL; END; END LOOP; 在循环内部捕捉异常,跳过继续执行.OTHERS 也可以换成具体的预定义错误 不过速度我没试过 试试看吧
用Unique Index来解决. 在程序中处理例外.在存储过程中,处理的方法如下: //程序开始了 . . //插入语句 Begin Insert Into ... when others ... End //程序继续 ... 这样,出现违反unique规则的插入不会中继整个的处理。 -------------- 采用目的查询的办法,与采用unique一样,但还要更慢一些。因为你自己做的方法,无论如何也比不上Oracle自己的处理快。
我现在还好只有一个独立的job在处理这些记录,采用对目的表进行的not exists查询,150万条左右的记录要1个半小时左右,有没有办法更快?或好算法的建议!
FOR I IN CURSOR_NAME
LOOP
BEGIN
....
EXCEPTION
WHEN OTHERS THEN
NULL;
END;
END LOOP;
在循环内部捕捉异常,跳过继续执行.OTHERS 也可以换成具体的预定义错误
不过速度我没试过
试试看吧
在程序中处理例外.在存储过程中,处理的方法如下:
//程序开始了
.
.
//插入语句
Begin
Insert Into ...
when others
...
End
//程序继续
...
这样,出现违反unique规则的插入不会中继整个的处理。
--------------
采用目的查询的办法,与采用unique一样,但还要更慢一些。因为你自己做的方法,无论如何也比不上Oracle自己的处理快。