Не совсем согласен с DCookie.
ЕСЛИ сеанс А вставляет значение «синий» (которое принудительно является уникальным), а затем сеанс В вставляет значение «синий», сеанс Б будет ожидать наблокировка от сеанса A. Если сеанс A фиксируется, тогда сеанс B получит нарушение ограничения.если сеанс A выполняет откат, то сеансу B будет разрешено продолжить.
Потенциально, для сеанса A существует очень небольшая область для вставки строки и ее фиксации, сеанса B для получения нарушения ограничения, а затемстрока, которая будет удалена до того, как сессия B сможет обновить ее.Я бы сказал, что это очень маловероятно.
Сначала я посмотрю, существует ли только одно уникальное ограничение для таблицы target_total.Если нет, вы хотите быть очень уверенным, какое ограничение вызывает нарушение.Также проверьте наличие уникальных индексов и ограничений.
Проверьте, есть ли какое-либо несоответствие типа данных или мешающий триггер.NUMBER (2,0) может не совпадать с числовым значением 1.1 в сопоставлении выбора, но при вставке 1.1 будет усечено до 1,0, что может привести к нарушению ограничения.В моем примере, если для триггера принудительно задана заглавная буква «СИНИЙ», тогда выбор может не совпадать с «синим», вставка может завершиться ошибкой по дублирующему ключу «СИНИЙ», а последующая вставка также не будет соответствовать «синий ".
Затем проверьте имя переменной.В INSERT .... VALUES ( идентификатор ), тогда идентификатор должен быть переменной PL / SQL.Однако столбец SELECT * FROM таблицы WHERE = идентификатор , тогда идентификатор может быть именем столбца, а не переменной PL / SQL.Если есть имя столбца или функция accountId , это будет иметь приоритет над переменной PL / SQL с тем же именем.Хорошей привычкой является префикс переменных PL / SQL, чтобы никогда не возникало такого конфликта пространства имен.
Моя единственная другая идея заключается в том, что, поскольку вы работаете в многопоточном режиме, есть ли потенциал для потоков, чтобыконфликт.Это может быть более вероятным в реальной среде, когда потоки могут блокировать блокировки из других сеансов.Это может заставить их синхронизироваться странным образом, который не возникает при тестировании.