YouJu
|
KOLLIAK
|
|
|
|
Рег.: 24.12.2003
|
Сообщений: 3102
|
Из: Королев
|
Рейтинг: 2678
|
|
[clesed] ORACLE:>> ALTER SEQUENCE ?
23.07.2009 16:00
|
|
|
Всем привет.
Появилась необходимость модифицировать текущее значение сиквенса. В связи с этим вознокло 2 вопроса, мб кто знает?
1) возможно ли получить текущее значение сиквенса не применяя предварительно к нему nextval ? (значения cache_size<>'1' и increment_by='1')
2) ну и собственно какой командой модифицируется текущее значение сиквенса? модифицируется ли? ( чет поиск не помог )
Спасибо.
Редактировал YouJu (24.07.2009 18:45)
|
|
YouJu
|
KOLLIAK
|
|
|
|
Рег.: 24.12.2003
|
Сообщений: 3102
|
Из: Королев
|
Рейтинг: 2678
|
|
Re: ORACLE:>> ALTER SEQUENCE ?
[re: YouJu]
23.07.2009 16:17
|
|
|
Есть 2 сиквенса в разных базах (Прод и Тест). Каждый живет своей жизнью. Время от времени необходимо актуализировать тестовую базу. Со всеми остальными объектами все ясно, все обновляется автоматом, а вот с сиквенсами засада, пока это ручной труд... но очень хочется автоматизировать... 1) в принципе вместо курр_вал можно брать user_sequences.last_number, он по крайней мере уж точно не меньше, что уже гут. 2) а вот с автоматической модификацией пока засада... пересоздание сиквенсов не катит, т.к. слетят все гранты.
|
|
Burjui
|
Pooh-Bah
|
|
|
|
Рег.: 26.11.2005
|
Сообщений: 2416
|
|
Рейтинг: 3784
|
|
Re: ORACLE:>> ALTER SEQUENCE ?
[re: YouJu]
23.07.2009 16:38
|
|
|
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 /
|
|
YouJu
|
KOLLIAK
|
|
|
|
Рег.: 24.12.2003
|
Сообщений: 3102
|
Из: Королев
|
Рейтинг: 2678
|
|
Re: ORACLE:>> ALTER SEQUENCE ?
[re: Burjui]
23.07.2009 16:55
|
|
|
Спасибо! =)
В ответ на:
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 поработаю.
|
|
YouJu
|
KOLLIAK
|
|
|
|
Рег.: 24.12.2003
|
Сообщений: 3102
|
Из: Королев
|
Рейтинг: 2678
|
|
Re: ORACLE:>> ALTER SEQUENCE ?
[re: YouJu]
24.07.2009 14:50
|
|
|
кто-то не согласен с тем, что select sequence.curval from dual отработает ТОЛЬКО В ТОМ СЛУЧАЕ, если сиквенс дергали в рамка текущей сессии и выругается если не дергали?
|
|
Butcher
|
Carpal Tunnel
|
|
|
|
Рег.: 04.09.2002
|
Сообщений: 3504
|
|
Рейтинг: -30
|
|
Re: ORACLE:>> ALTER SEQUENCE ?
[re: YouJu]
25.07.2009 09:58
|
|
|
сиквенсы лочаться на уровне защелок, с транзакциями и сессиями не связаны, для всех сессий select sequence.curval from dual - даст одно и тоже значение.
|
|
Burjui
|
Pooh-Bah
|
|
|
|
Рег.: 26.11.2005
|
Сообщений: 2416
|
|
Рейтинг: 3784
|
|
Re: ORACLE:>> ALTER SEQUENCE ?
[re: Butcher]
26.07.2009 14:36
|
|
|
YouJu имел ввиду вот это:
В ответ на:
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 YouJu: кстати а почему не подходит? Ну создашь ты следующее значение даже если оно вдруг будет больше требуемого нигде в приложении оно у тебя не использовалось, а инкремент может быть и отрицательным, т.ч. можно легко вернуть старое.
|
|