костыли приходится в коде городить из-за этого
А вам точно мердж нужен, если требуется returning? Может тогда update + insert?
Мне в приложение могут одновременно прийти запросы по одной и той же сущности, поэтому нужен именно merge.
если вы хотите защититься от ora-1, то merge не поможет
от нарушения уникального индекса.
UPDATE tablename SET val1 = in_val1, val2 = in_val2 WHERE val3 = in_val3; IF ( sql%rowcount = 0 ) THEN INSERT INTO tablename VALUES (in_val1, in_val2, in_val3); END IF;
потому что допустим первый merge попытается сделать insert и второй тоже, и упадёт?
это тоже не всегда работает, т.к в момент между update и insert может случиться insert в другой сессии
update ... if sql rowcount = 0 then begin insert exception when dup_value_on_index then update end if
Обсуждают сегодня