在一个增量维护的数据库系统中,为了使插入的数据与已存在的数据不重复,需要在插入每条记录时根据关键字段的内容查询数据库中有无重复记录,如果有就使用UPDATE语句更新这条记录,如果没有就使用INSERT插入新记录。 这样的操作方式在操作少量数据时对系统的运行效率不会产生什么影响,但是一旦数据量达到两三百万的时候,每更新一条记录就要搜索一次有无重复,效率也降低很多,也曾想过使用存储过程来实现数据判断导入,客户程序只负责将数据传递给存储过程,由他来执行查询更新操作,但可能速度也不会有质的提高,能不能通过捕获ORACLE的错误提示,比如当我插入一条重复记录时,由于定义的唯一约束,数据库一定会报错,再根据这个错误代码来判断是更新还是插入。请问有人这样实现过么,愿闻其详!
或者有其它更好的解决方法!
或者有其它更好的解决方法!
具体语法可以google一下
将B中数据不重复的插入A中 MERGE INTO A a
USING B b
ON(a.XH=b.XH)
WHEN NOT MATCHED THEN INSERT--如果不匹配则插入
Values(b.xh,b.xm,b.zym,b.xb,b.cssj,b.zxf,b.bz);
merge into ta a
using (select * from tb ) b
on (a.id = b.id)
when matched then update set a.name = b.name
when not matched then insert (id,name)
values ( b.id,b.name);
可以分批比较,比如每1万merge into 一次。
在存储过程中动态拼 merge into 语句,然后用execute immediate 来执行。如果需要记录错误的话,只能用FORALL 来一条条加sql,然后批量更新