Я сделал это двумя способами.
Имея две базы данных Sybase на разных компьютерах, я настроил процедуры хранения и затем вызывал подобные функции для отправки данных туда и обратно. Это дополнительно позволило sprocs провести аудит / запись в журнал, чтобы убедить клиента, что в процессе не было потеряно никаких данных.
В Oracle для Sybase одним способом я использовал представление для маршалинга данных и библиотек C каждого производителя, вызываемых из программы C ++, которая давала API-интерфейсам C общий интерфейс.
В настройках MySQL и DB2, где, как и в вашей ситуации, Db2 был «устаревшим, но живым», я использовал настройку, аналогичную описанной вами: извлечение данных в клиентскую программу (Java).
Если соединение всегда один-к-одному, а набор результатов каждого блока имеет один и тот же ключ, вы можете вытащить их обоих в одинаковом порядке и тривиально соединить их в клиенте. Даже если они один-ко-многим, склеивание их - просто односторонняя итерация обоих ваших списков.
Если их станет много ко многим, я могу вернуться к обработке по одному элементу за раз (хотя вы можете использовать поиск по HashSet).
Однако, в основном, вы выбираете sprocs (для которого вам потребуется и уровень клиента) или просто делаете это на клиенте.