Этот код предназначен для установки последовательности, начинающейся с нового значения.
Например, предположим, что у нас есть таблица, идентификатор которой обычно генерируется последовательностью our_seq
, но по какой-то причине мы загрузили 10000 записей без использования последовательности.Что произойдет, если мы вставим новую запись?В текущем состоянии our_seq.nextval
сгенерирует идентификатор, который конфликтует с ключом массовой загрузки записи.
Итак, нам нужно отрегулировать значение последовательности.Один из способов сделать это - выбрать nextval
десять тысяч раз.Или мы можем
- изменить последовательность для увеличения на 10000
- выбрать nextval для последовательности один раз
- изменить последовательность для увеличения на 1 еще раз
Пакет Tom Kyte - это способ автоматизации второго подхода.Лично я бы расценил это как интересный сувенир.Если вам нужно выполнять эту операцию достаточно часто, чтобы автоматизировать ее, вам, вероятно, следует пересмотреть свои методы загрузки данных.
может [мы] увеличить последовательность на 10001 без выбора оператора?
Нет.Единственный поддерживаемый способ сделать это - удалить последовательность и заново создать ее с требуемым началом со значением.Удаление объекта более сложное из-за грантов, недействительности кода и т. Д.
Предположим, что вас интересует последовательность, скажем, текущее значение = 10001, и вы хотите сбросить ее, чтобы она начиналась с 1, и вы снова передали быотрицательный прирост -10001.Будьте осторожны, вы не уменьшаете его после minvalue
(по умолчанию 1);база данных не будет вас предупреждать или бросать, пока вы не введете nextval
, и в этот момент она сообщит вам:
ORA-08004: sequence OUR_SEQ.NEXTVAL goes below MINVALUE and cannot be instantiated