在黑名单导入时,遇到第一次导入后,假如第二次导入重复数据,该如何解决。
首先想到的是,按照id,直接delete那条记录,重新insert
但是黑名单数据不止一条,后采用insertOrUpdate方案:
最先找到的是这样一条insertOrUpdate:
INSERT INTO table_name( 列名1, 列名2, ... )VALUES( value1,value2,... )
SELECT * FROM(SELECT ?列名1,? 列名2,? .... FROM DUAL)AS b ON DUPLICATE KEY
UPDATE 列名1=b.列名1, 列名2=b.列名2 , ...
But,以上方法在MySql中可以实现,经测试在oracle完全不行。
最后查到merge into 可以解决此类问题,不过需要oracle9.0以上(经询问项目正是10g版本)多次修改最终成功测试,oracle语句如下(为便于理解,格式已经改动):
MERGE INTO table_name L USING (SELECT * FROM DUAL) N
ON (L.列名5='1000000237')
首先想到的是,按照id,直接delete那条记录,重新insert
但是黑名单数据不止一条,后采用insertOrUpdate方案:
最先找到的是这样一条insertOrUpdate:
INSERT INTO table_name( 列名1, 列名2, ... )VALUES( value1,value2,... )
SELECT * FROM(SELECT ?列名1,? 列名2,? .... FROM DUAL)AS b ON DUPLICATE KEY
UPDATE 列名1=b.列名1, 列名2=b.列名2 , ...
But,以上方法在MySql中可以实现,经测试在oracle完全不行。
最后查到merge into 可以解决此类问题,不过需要oracle9.0以上(经询问项目正是10g版本)多次修改最终成功测试,oracle语句如下(为便于理解,格式已经改动):
MERGE INTO table_name L USING (SELECT * FROM DUAL) N
ON (L.列名5='1000000237')
WHEN MATCHED THEN
UPDATE SET 列名X ='20130412'
UPDATE SET 列名X ='20130412'
WHEN NOT MATCHED THEN
INSERT
INSERT