[clesed] ORACLE:>> ALTER SEQUENCE ?

macrophage

Всем привет.
Появилась необходимость модифицировать текущее значение сиквенса. В связи с этим вознокло 2 вопроса, мб кто знает?
1) возможно ли получить текущее значение сиквенса не применяя предварительно к нему nextval ? (значения cache_size<>'1' и increment_by='1')
2) ну и собственно какой командой модифицируется текущее значение сиквенса? модифицируется ли? ( чет поиск не помог )
Спасибо.

macrophage

Есть 2 сиквенса в разных базах (Прод и Тест). Каждый живет своей жизнью. Время от времени необходимо актуализировать тестовую базу. Со всеми остальными объектами все ясно, все обновляется автоматом, а вот с сиквенсами засада, пока это ручной труд... но очень хочется автоматизировать...
1) в принципе вместо курр_вал можно брать user_sequences.last_number, он по крайней мере уж точно не меньше, что уже гут.
2) а вот с автоматической модификацией пока засада... пересоздание сиквенсов не катит, т.к. слетят все гранты.

mbolik1

1. select sequence.curval from dual. Если из последовательности уже выбирали после старта базы.
2. Обычно делают так: если нужно значение m, а сейчас n. То делают:
alter sequence seq increment by m-n
/
select seq.nextval from dual
/
alter sequence seq increment by oldvalue
/

macrophage

Спасибо! =)
1. select sequence.curval from dual. Если из последовательности уже выбирали после старта базы.

со стартом базы этот селект никак не связан.. он отработает только в том случае, если с сиквенсом "работали" в рамках текущей сессии.
2. Обычно делают так: если нужно значение m, а сейчас n. То делают:
alter sequence seq increment by m-n
/
select seq.nextval from dual
/
alter sequence seq increment by oldvalue
/
а вот это круто.. чеж я сам не догадался-то?
PS
пока вместо curr_val c user_sequences.last_number поработаю.

macrophage

кто-то не согласен с тем, что select sequence.curval from dual отработает ТОЛЬКО В ТОМ СЛУЧАЕ, если сиквенс дергали в рамка текущей сессии и выругается если не дергали?

KViH

сиквенсы лочаться на уровне защелок, с транзакциями и сессиями не связаны, для всех сессий select sequence.curval from dual - даст одно и тоже значение.

mbolik1

имел ввиду вот это:
To use or refer to the current sequence value of your session, reference seq_name.CURRVAL. CURRVAL can only be used if seq_name.NEXTVAL has been referenced in the current user session (in the current or a previous transaction).

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