Можно ли выполнить атомарное MERGE в Oracle?

У меня есть пара экземпляров приложения J2EE, работающего в одном кластере WebLogic.

В какой-то момент эти приложения выполняют MERGE для вставки или обновления записи в серверный Oracle база данных. MERGE проверяет, есть ли там строка с указанным первичным ключом. Если он есть, обновите. Если не, insert.

Теперь предположим, что два экземпляра приложения хотят вставить или обновить строку с первичным ключом = 100. Предположим, эта строка не существует. На этапе «проверки» слияния они оба видят, что строк нет, поэтому оба пытаются вставить. Затем я получаю сообщение о нарушении ограничения уникального ключа.

У меня такой вопрос: существует ли атомарное MERGE в Oracle? Я ищу что-то похожее на INSERT ... FOR UPDATE в PL / SQL, за исключением того, что я могу выполнять SQL только из моих приложений.

EDIT: Я не понял. Я использую оператор MERGE, пока эта ошибка все еще возникает. Дело в том, что только «модифицирующая» часть является атомарной, а не все слияние.

18
задан ROMANIA_engineer 22 October 2014 в 22:21
поделиться