Страницы

Поиск по вопросам

воскресенье, 12 января 2020 г.

Как занести данные в db2 с помощью merge?

#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 для импорта в целевую таблицу.

Комментариев нет:

Отправить комментарий