Детский вопрос.
Есть таблица
ID в ней не из генератора - это сущность из другой таблицы. Сама эта таблица - некий кэш, который время от времени очищается и затем снова наполняется по мере необходимости.
Есть две транзакции RWRC (read_committed,rec_version,nowait)
Обе они пытаются вставить одинаковую запись
Вопрос. Существует ли штатный механизм, как сделать так, чтобы гарантированно ибежать lock_conflict и unique_key_violation (если запись с таким клчем уже есть, то просто не вставлять запись)?
У меня сейчас
И обработчик исключения. Которое крайне редко возникает (и если возникает - ничего страшного, главное что запись уже есть), т.ч. работает приемлемо.
Но хотелось бы узнать - можно ли сделать лучше? Как-то MERGE применить например, или еще что? Спасибо.
Есть таблица
CREATE TABLE TABLE1 ( ID INTEGER NOT NULL PRIMARY KEY );
ID в ней не из генератора - это сущность из другой таблицы. Сама эта таблица - некий кэш, который время от времени очищается и затем снова наполняется по мере необходимости.
Есть две транзакции RWRC (read_committed,rec_version,nowait)
Обе они пытаются вставить одинаковую запись
INSERT INTO TABLE1 ( ID ) VALUES ( 100 )
Вопрос. Существует ли штатный механизм, как сделать так, чтобы гарантированно ибежать lock_conflict и unique_key_violation (если запись с таким клчем уже есть, то просто не вставлять запись)?
У меня сейчас
IF ( NOT EXISTS ( SELECT FIRST 1 1 FROM TABLE1 WHERE ID = 100 ) ) THEN INSERT INTO TABLE1 ( ID ) VALUES ( 100 );
И обработчик исключения. Которое крайне редко возникает (и если возникает - ничего страшного, главное что запись уже есть), т.ч. работает приемлемо.
Но хотелось бы узнать - можно ли сделать лучше? Как-то MERGE применить например, или еще что? Спасибо.