我有一个Java程序,用于比较数据并将其从本地Oracle数据库移动到在线供应商托管的外部MS SQL数据库中。
当前,该程序使用SELECT * FROM myTABLE
连接到MS SQL数据库,并将结果放入二维数组中。然后在Oracle中创建一个临时表,并使用for循环将数据插入到临时表中:
for (int ii = 0; ii < arr.length(); ii++){
query = "insert into myTable_temp values "+values_from_array;
stmt.executeQuery();
}
使用
MINUS
语句查找差异:query = "select * from ora_table minus select * from myTable_temp";
rs = stmt.executeQuery();
然后使用insert_into_mssql()方法将结果插入回到MS SQL表中:
while (rs.next()){
query = "insert into myTable values "+ values_from_rs
insert_into_mssql(query);
}
除我正在使用的表具有220,000行外,此方法均工作正常。因此,需要很长时间才能加载数组,将其插入到temp表中,运行minus语句,然后将所有内容重新插入mssql表中。
有没有更有效的方法可以做到这一点?还是一种更快的方法?
(dblink或任何直接连接在安全性限制方面均不起作用)
最佳答案
是的,您使用的是哪个版本的MS SQL Server?因此,您可以查看SSIS或其他DTS软件。它使您可以快速准确地完成自己想要的事情。