У меня есть Java-программа, которая сравнивает и перемещает данные из локальной базы данных Oracle во внешнюю базу данных MS SQL, размещенную онлайн-поставщиком.
В настоящее время программа подключается к базе данных MS SQL, выполняя SELECT * FROM myTABLE
и помещая результаты в двумерный массив.Затем в 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();
и результат затем вставляется обратно в таблицу MS SQL с использованием метода insert_into_mssql ():
while (rs.next()){
query = "insert into myTable values "+ values_from_rs
insert_into_mssql(query);
}
Это прекрасно работает, за исключением того, что в используемой мной таблице содержится 220 000 строк.Таким образом, загрузка массива занимает много времени, вставляется в временную таблицу, выполняется оператор минус, а затем вставляется все обратно в таблицу mssql.
Есть ли более эффективный способ сделать это?или способ сделать это быстрее?(dblink или любое прямое соединение не работает из-за ограничений безопасности)