У меня есть эта таблица в oracle 11g.Oracle Merge - нарушение ограничений по уникальному ключу
TABLE: ORDER_LOCK
Name Null Type
---------------------- -------- ----------
ORDER_ID NOT NULL NUMBER(10) [PRIMARY KEY]
ORDER_REF_ID NUMBER(10) [UNIQUE KEY]
ORDER_MSG_SENT NUMBER(1)
merge into ORDER_LOCK al
using (select ? ORDER_REF_ID, ? ORDER_MSG_SENT from dual) t
on (al.ORDER_REF_ID = t.ORDER_REF_ID)
when not matched then
insert (ORDER_ID, ORDER_REF_ID, ORDER_MSG_SENT)
values (ORDER_LOCK_SEQ.nextval, t.ORDER_REF_ID, t.ORDER_MSG_SENT)
Я использую приведенное выше слияние из своих приложений (Java). Вызов слияния происходит из нескольких потоков. Код работает нормально, но вчера мы получили нарушение ограничения (ORA-00001) на уникальном ключе «ORDER_REF_ID».
Есть ли проблема с оператором Merge? или существует ли какой-либо конкретный сценарий, когда вышеуказанный оператор Merge может привести к нарушению ограничения?
Благодаря
Пушкарь
Вы проверили, могут ли два или более потока пытаться вставить тот же order_ref_id? –