2017-01-29 3 views
-1

Я пытался сделать пакетную вставку в DB оракуля. Запрос:Пакетная вставка в оракуле с использованием max (column) + 1 для ключа primark дает ошибку DuplicateException

INSERT INTO <table-name> (A, B) values ((SELECT MAX(A)+ 1 FROM <>table-name), "xyz") 

В вставке партии были аналогичные два оператора. Вышеупомянутая операция бросила DuplicateException.

+2

Теперь вы знаете, почему генерация идентификаторов таким образом - плохая идея. – mustaccio

ответ

1

Вы должны действительно использовать последовательность или вычисленный (сгенерированный) столбец для вычисления A - хотя Oracle исторически сделал это более сложным, чем это должно быть.

Однако, если ваша проблема возникает с A, тогда проблема может быть в том, что A всегда NULL. Если это так:

INSERT INTO <table-name> (A, B) 
    SELECT COALESCE(MAX(A), 0) + 1, 'xyz' 
    FROM <table-name>; 

Вы также можете иметь уникальный индекс/ограничение на B или на какой-либо другой колонке не входит в insert. И, для полноты, я должен упомянуть, что ошибка может исходить от триггера вставки в таблице.

+0

№ 'A' не' NULLL' – arvind

+0

Еще одна возможность - это две вставки в то же время, которые конфликтуют. –

+0

Мой вопрос: будет ли пакетная вставка вызывать какие-либо проблемы? – arvind

 Смежные вопросы

  • Нет связанных вопросов^_^