Частенько необходимо установить последовательность в какое-то произвольное значение.
Есть несколько вариантов такой процедуры.
Чаще всего рекомендуют прокрутить в цикле последовательность до нужного значения.
Если нужное значение меньше, чем текущее, то нужно перевалить через максимальное
значение, получаем 0 и доходим до нужного значения.
Но это хорошо, если разница небольшая, иначе это может занять ощутимое время.
Второй вариант заключается в установке шага последовательности равной разнице необходимого значения и текущего, выполнение этого шага, восстановление исходного шага.
SQL>ALTER SEQUENCE clients_seq INCREMENT BY 1300001;
SQL>SELECT clients_seq.NEXTVAL FROM dual;
SQL>ALTER SEQUENCE clients_seq INCREMENT BY 1;
Ну и самый простой вариант, но требующий прав DBA - для любителей-экстремалов:
UPDATE sys.seq$ SET highwater=66 WHERE sys.seq$.obj# = (SELECT o.obj# FROM sys.obj$ o, sys.USER$ u WHERE o.name='ID_CUR#SEQ' AND u.name='UBC' AND u.USER#=o.OWNER#);
То есть прописываем в лоб в системную таблицу :)
Что бы не зависить от прав DBA, можно вставить этот SQL в процедуру с соответствующими
параметрами от пользователя с правами DBA, и дать на её исполнение всем права.
!!! Предупреждаю! После таких действий последовательность
может себя вести неадекватно :)
Во всех вариантах нужно пропустить в конце COMMIT, что бы остальные увидели результат изменения.