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