Модификация последовательности

Функция

Определение оператора модификации общей или личной последовательности.

Спецификация
   
< модификация последовательности >::=
ALTER [PUBLIC] SEQUENCE [имя схемы.]имя последовательности
[{START|RESTART} WITH начальное значение]
[CURRENT VALUE текущее значение]
[INCREMENT BY шаг]
[MAXVALUE верхняя граница|NOMAXVALUE|NO MAXVALUE]
[MINVALUE нижняя граница|NOMINVALUE|NO MINVALUE]
[CYCLE|NO CYCLE]
< текущее значение >::=
Синтаксические правила
  1. < Имя последовательности > должно задавать существующую последовательность.

  2. Описание опций START WITH, INCREMENT BY, MAXVALUE, NO MAXVALUE, MINVALUE, NO MINVALUE, CYCLE, NO CYCLE приведено в пункте «Создание последовательности».

  3. Опции START и RESTART являются синонимами.

  4. Опции NO MAXVALUE и NOMAXVALUE являются синонимами.

  5. Опции NO MINVALUE и NOMINVALUE являются синонимами.

  6. Одновременное указание опций START|RESTART WITH и CURRENT VALUE не допускается.

  7. < Начальное значение >, < шаг >, < верхняя граница > и < нижняя граница > – целочисленные значения в диапазоне от -9 223 372 036 854 775 808 до +9 223 372 036 854 775 807 (тип данных BIGINT).

  8. Величины < начального значения >, < верхней границы > и < нижней границы > не должны логически противоречить друг другу.

  9. < Шаг > последовательности должен лежать в интервале от -72057594037927936 до 72057594037927935.

Общие правила
  1. Для изменения PUBLIC-последовательности необходим уровень прав DBA.

  2. Изменять личную последовательность может только ее создатель при наличии уровня прав RESOURCE.

  3. Если задана опция START (RESTART), то следующим выбираемым значением последовательности будет < начальное значение >. Оно не сравнивается с ранее выбранными значениями этой же последовательности на предмет непротиворечивости (например, дублирование номера последовательности).

    create sequence my_seq start with 10;
    select my_seq.nextval;
    |         10|
    
    alter sequence my_seq start with 6;
    select my_seq.nextval;
    |          6|
    
    alter sequence my_seq increment by 2;
    select my_seq.nextval;
    |          8|
    
    select my_seq.nextval;
    |         10|
  4. Опция CURRENT VALUE устанавливает новое текущее значение последовательности, не затрагивая прежнее текущее и стартовое значение, установленное при создании или модификации последовательности с помощью опции START (RESTART). Новое текущее значение должно находится в границах созданной последовательности.

    Примечание

    Опция CURRENT VALUE применяется, как правило, для восстановления текущего значения последовательности после миграции БД.

Примеры
create or replace sequence INT_MINUS_C as integer start with 20 increment by -3 minvalue 7 maxvalue 20 cycle;
select INT_MINUS_C.NEXTVAL from $$$SYSRL where rowid <  5;
|         20|
|         17|
|         14|
|         11|

alter sequence INT_MINUS_C current value 10;
select INT_MINUS_C.NEXTVAL from $$$SYSRL where rowid <  5;
|         10|
|          7|
|         20|
|         17|
create or replace sequence A_SEQ start with 1;
select A_SEQ.NEXTVAL;
alter sequence A_SEQ increment by 100;
select A_SEQ.NEXTVAL;
alter sequence A_SEQ increment by -111 maxvalue 1000 minvalue -100000;
select A_SEQ.NEXTVAL;
alter sequence A_SEQ increment by -1000 nomaxvalue nominvalue;
select A_SEQ.NEXTVAL;