#sql #oracle #db2
Как можно занести конкретные данные с помощью merge? В документации сказано, что в using достаются значения из другой таблицы, данные которой нужно занести в целевую таблицу. Неужели нет возможности выполнить мерж со своими данными, которых нет в других таблицах? Нашел такие примеры, но при попытки выполнить подобный запрос, субд жалуется, что не находит в схеме таблицу dual merge into data using ( select 'someid' id, 'testKey' key, 'someValue' value from dual ) val on (data.id=val.id and data.key=val.key) when matched then update set data.value = val.value when not matched then insert (id, key, value) values (val.id, val.key, val.value); Возможно, этот вопрос сводится к другому. Как внутри запроса создать временную таблицу, с которой можно сравнивать данные из таблицы-назначения? Создание временных таблиц не целесообразно, т.к. тогда не будет выигрыша по времени, ради которого этого делается. Запросы выполняются с java-сервера и хочется их отправлять с помощью batch. Т.е. отправить один запрос, а дальше отдавать только параметры.
Ответы
Ответ 1
Возможность выполнить merge со своими данными есть - merge как в вопросе будет работать на Oracle сервере. На DB2 он конечно работать не будет, т.к. там нет псевдотаблицы dual. Если вы отправляете запрос на DB2, то надо в using указать исходную таблицу которая ему известна, т.е.: select 1 from src_table where rownum=1 должно вернутся без ошибки. Если в среде Java имеется два подсоединения, на DB2 и Oracle, воспользуйтесь insert и update. Практического применения merge в этом случаея не вижу. Другой вариант - вы создаёте одну из таблиц, или исходную, или целевую, как удалённую через dblink и вставляете её в merge. И ещё один надёжный вариант - создаёте исходную stage таблицу, заполняете её любым доступным способом - dblink, файлы - и пользуйтесь merge для импорта в целевую таблицу.
Комментариев нет:
Отправить комментарий