4

我必须将我的数据库表中的数据与来自 sql 查询的新数据同步,我需要删除不在新数据中的当前条目并插入不在当前数据中的新条目。我能够使用这个伪代码在java中做到这一点:

// 1) get all data in database and store it in list (currentList)
// 2) get new data obtained through sql query and store it in list (newList)
// 3) sync both list

for(entry : currentList) {
    if(newList.contains(entry))
        finalList.add(entry) 
}

for(entry : newList) {
    if(!finalList.contains(entry))
        finalList.add(entry)
}

// 4) delete all data from DB
// 5) insert finalList data to DB

它工作正常,但是,我认为在处理大量数据时它会出现性能问题,因为我正在删除所有内容并重新插入整个列表,而不是仅仅插入新条目并删除在新数据中找不到的条目。

你能建议一个更好的方法吗?是否可以创建一个可以处理数据同步的 sql 查询?

4

2 回答 2

1

看看MERGE

该构造将允许您指定更新现有记录或添加新记录的条件。

它基本上看起来像:

MERGE 
   INTO target_table
   USING source_table
 ON (some condition)
WHEN MATCHED 
     ( UPDATE some_update_statement )
WHEN NOT MATCHED 
     ( INSERT some_insert_statement )
于 2013-03-21T10:41:33.597 回答
0

您还可以在存储过程中执行这些操作,以免不必要地增加数据库流量。

但是,这不适用于大量条目(例如数百万个条目)或每个条目非常大的情况。在这种情况下,请尝试使用 Ryan 上面指出的 MERGE 操作。

考虑以下 PL/SQL 伪代码(您可能希望根据您的用例对其进行更改):

PROCEDURE replace_with_list (newList) AS
BEGIN
  /* Delete all the entries that are not present in the newList (e.g. by ID) */
  /* Insert all the entries that present in newList and not present in your table  */
END;
于 2013-03-21T10:53:43.610 回答