Oracle Merge: если не совпадает, удалите и вставьте

У меня простой запрос, но меня смущает только одна часть:

У меня есть следующий алгоритм:

merge into table_1 table_2
on table_1.val1 = table_2.val1
when matched and table_1.val2 = table_2.val2
   then merge
when matched and table_1.val2 != table_2.val2
   then delete and insert ( I AM NOT SURE NOW TO DO THIS)
when not matched
   then insert;

Можете ли вы помочь мне с удалением и вставкой или сказать мне способ?

1 ответ

Решение

Вы не можете вставить в предложение WHEN MATCHED THEN UPDATE. Вы можете только УДАЛИТЬ здесь. А зачем вам удалять, а потом вставлять, если можно просто обновить? Что-то вроде этого:

merge into table_1 
using table_2 on (table_1.val1 = table_2.val1)
when matched then 
     update set table_1.val3 = 
                case when table_1.val2 = table_2.val2 
                     then table_1.val3 
                else table_2.val3 end
when not matched then insert ...

Из комментариев ниже, я полагаю, вам нужно что-то вроде этого:

1) Нет внешних ключей, на которые ссылаются table_1
2) Отключить первичный ключ val2 в table_1
3) обновить table_1 set val2 = null;
4) запустить слияние
5) удалить из таблицы_1, где val2 равен нулю;
6) Включить первичный ключ в таблице_1

Другие вопросы по тегам