Oracle Вставка и автоинкрементная проблема - PullRequest
0 голосов
/ 16 октября 2019

У нас есть старая программа, построенная на базе данных Oracle 11g. Когда мы создаем новую запись, для нее создается новая строка, первичным ключом которой является число с автоинкрементом.

Недавно у нас была большая партия записей, которую нужно было вставить, и это было сделано с помощью вставки. заявление. Однако теперь, когда пользователь отправляется на создание новой записи, программа не распознает, что в таблицу были вставлены записи, и пытается начать с неправильной позиции. Это нарушает ограничение первичного ключа.

Например, последняя созданная в программе запись была 5001, но мы вставили 98 записей через оператор вставки. Когда пользователь пытается создать новую запись в программе, программа полагает, что идентификатор записи должен быть 5002, когда 5002 уже существует;он должен создать новую запись с идентификатором 5100.

Есть ли способ «обновить» это, чтобы программа распознала дополнительные записи?

Как правило, запись создается, когда пользовательнажмите «Новая запись» в интерфейсе программы. Создается новый идентификатор записи и строка, в запись добавляется дополнительная информация, а затем запись сохраняется.

Пакет был просто оператором INSERT, содержащим данные для новых записей, где идентификатор записи начинается стекущий идентификатор записи закончился. Это не оставило пробелов в последовательности.

1 Ответ

2 голосов
/ 16 октября 2019

Звучит так, как будто пакетная вставка не вызвала последовательность, которую использует ваша программа.

Вы можете отбросить последовательность и воссоздать ее, начиная с 5100:

Вы можете выполнить команду DROP SEQUENCE , за которой следует CREATE SEQUENCE , начиная с 5100.

DROP SEQUENCE sequence_name;

CREATE SEQUENCE sequence_name start with 5100;

Или вы можете изменить существующую последовательность с помощью ALTER SEQUENCE .

Если следующее значение для вашей текущей последовательности - 5002, вы можете:

ALTER SEQUENCE sequence_name increment by 97;

SELECT sequence_name.nextval from dual;

   NEXTVAL
----------
      5099

ALTER SEQUENCE sequence_name increment by 1;

Следующий вызов вернет 5100.


Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...