powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Почему не срабатывает merge?
6 сообщений из 6, страница 1 из 1
Почему не срабатывает merge?
    #39822334
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть такая таблица:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
CREATE TABLE BM_CUSTOMER_CONTACT
(
  CUSTOMER_CONTACT_ID  NUMBER                   NOT NULL,
  CUSTOMER_ID          NUMBER                   NOT NULL,
  CONTACT_DICT_ID      NUMBER                   NOT NULL,
  VALUE                VARCHAR2(255 BYTE)       NOT NULL
);


Выполняю такой запрос (id=95767, msg='test'):
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
merge into BM_CUSTOMER_CONTACT D
using (select CUSTOMER_ID from BM_CUSTOMER_CONTACT where CONTACT_DICT_ID = 999 and CUSTOMER_ID = :id) S
on (S.CUSTOMER_ID = D.CUSTOMER_ID)
when matched then
  update set D.VALUE = to_char(sysdate, 'yyyy-mm-dd hh24:mi') || ': ' || :msg
when not matched then
  insert (D.CUSTOMER_ID, D.CONTACT_DICT_ID, D.VALUE)
  values (:id, 999, to_char(sysdate, 'yyyy-mm-dd hh24:mi') || ': ' || :msg)


В таблице такой записи нет, поэтому должен отработать insert.
Однако при выполнении запроса 0 rows merged и строка не добавляется.
Не могу понять, почему.
...
Рейтинг: 0 / 0
Почему не срабатывает merge?
    #39822346
merch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.,


Код: plsql
1.
select CUSTOMER_ID from BM_CUSTOMER_CONTACT where CONTACT_DICT_ID = 999 and CUSTOMER_ID = :id



А сколько строк вернет этот запрос?
...
Рейтинг: 0 / 0
Почему не срабатывает merge?
    #39822348
dmdmdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если запрос

Код: plsql
1.
select CUSTOMER_ID from BM_CUSTOMER_CONTACT where CONTACT_DICT_ID = 999 and CUSTOMER_ID = :id



возвращает 0 строк, нечего мёрджить.

Вставьте вместо него

Код: plsql
1.
select 0 customer_id from dual
...
Рейтинг: 0 / 0
Почему не срабатывает merge?
    #39822349
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
0 строк, я же писал выше, что такой записи нет.

Переделал запрос на такой:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
merge into BM_CUSTOMER_CONTACT
using DUAL on (CONTACT_DICT_ID = 999 and CUSTOMER_ID = :id)
when matched then
  update set VALUE = to_char(sysdate, '[yyyy-mm-dd hh24:mi] ') || :msg
when not matched then
  insert (CUSTOMER_ID, CONTACT_DICT_ID, VALUE)
  values (:id, 999, to_char(sysdate, '[yyyy-mm-dd hh24:mi] ') || :msg)


Так все работает правильно.
Но не могу сообразить, почему не работал первый вариант.
...
Рейтинг: 0 / 0
Почему не срабатывает merge?
    #39822350
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
селект не возвращает записи, нечего вставлять (мержіть)


влоб
...
using (select :id, 999, to_char(sysdate, 'yyyy-mm-dd hh24:mi') || ': ' || :msg from dual)
...

или
select
union all
select ... from dual where not exists (....)
.....
stax
...
Рейтинг: 0 / 0
Почему не срабатывает merge?
    #39822351
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B. не могу сообразитьа зачем?
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Почему не срабатывает merge?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]