Вы можете создать глобальную временную таблицу , принадлежащую пользователю oracle, которая выполняет вставки с той же структурой, что и таблица назначения. Следующий псевдокод должен дать вам представление. Наименьшая суета - создать его с помощью ON COMMIT DELETE ROWS, но иногда проще использовать ON COMMIT PRESERVE ROWS и начинать каждый сеанс с
DELETE FROM <your global temporary table>;
Затем вставьте все данные из Spring в эту таблицу. Я предполагаю, что в таблице назначения нет повторяющихся идентификаторов или дублирующих городов с одинаковым идентификатором.
INSERT INTO <your destination table> SELECT city_id, city_name, third_field
FROM <your global temporary table>
WHERE <your global temporary table>.city_name
NOT IN (SELECT <your destination table>.city_name
FROM <your destination table>);
Если у вас есть дублированные названия городов с другим идентификатором, вы можете просто добавить еще одно предложение NOT IN.