Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.04.26;
Скачать: CL | DM;

Вниз

Изменение текущего значения генератора   Найти похожие ветки 

 
Евгений Р.   (2008-08-28 23:25) [0]

После перекачивания данных со старой программы в новую хочу установить значение генератора:
ALTER SEQUENCE GEN_N RESTART WITH
         (select max(field1)+1
          from table1)

похоже, что эта команда работает только с константой?


 
Евгений Р.   (2008-08-28 23:30) [1]

аналогично SET GENERATOR


 
turbouser ©   (2008-08-29 06:11) [2]

Может так устроит?
select gen_id(GEN_N,(select max(field1)+1 from table1)) from rdb$database


 
Евгений Р.   (2008-08-29 14:45) [3]

т.е. в 2 запроса:
1- обнулить его
2- [2] инкременировать на нужную величину?


 
turbouser ©   (2008-08-29 14:57) [4]


> Евгений Р.   (29.08.08 14:45) [3]

Зачем в 2 запроса ? при выполнении запроса из [2] GEN_N будет иметь значение max(field1)+1
Какой смысл обнулять?


 
turbouser ©   (2008-08-29 14:59) [5]

Присвоение значения генератору происходит вне контекста транзакции


 
Евгений Р.   (2008-08-29 15:33) [6]

проверка:
1.создаю gen_n
2.присваиваю значение 1000
3.select gen_id(GEN_N,200) from rdb$database
4.значение стало 1200. а мне надо установить 200

за направление спасибо
 искомый результат получил:
select gen_id(GEN_N,
            (select max(field) from table)-
                (select gen_id(GEN_N,0)from rdb$database)) from rdb$database


 
turbouser ©   (2008-08-29 15:38) [7]


> Евгений Р.   (29.08.08 15:33) [6]

А, точно, там же инкремент...


 
Евгений Р.   (2008-08-29 15:54) [8]

А всеже ALTER SEQUENCE GEN_N RESTART WITH nn работает только с константой?


 
turbouser ©   (2008-08-29 16:15) [9]

в parse.y вот что:
alter_sequence_clause : symbol_generator_name RESTART WITH signed_long_integer
  { $$ = make_node (nod_set_generator2, e_gen_id_count, $1,
   MAKE_const_slong ((IPTR) $4)); }
 | symbol_generator_name RESTART WITH NUMBER64BIT
  { $$ = make_node (nod_set_generator2, e_gen_id_count, $1,
   MAKE_constant((dsql_str*) $4, CONSTANT_SINT64)); }
 | symbol_generator_name RESTART WITH "-" NUMBER64BIT
  { $$ = make_node (nod_set_generator2, e_gen_id_count, $1,
   make_node(nod_negate, 1, MAKE_constant((dsql_str*) $5, CONSTANT_SINT64))); }

Если я правильно понял - то только константа.


 
Евгений Р.   (2008-08-29 16:31) [10]


> turbouser ©   (29.08.08 16:15) [9]

а как Вы это получили?


 
turbouser ©   (2008-08-29 16:39) [11]


> Евгений Р.   (29.08.08 16:31) [10]

FB ведь OpenSource.
Вот тут, например
http://fisheye1.atlassian.com/browse/~raw,r=1.293/firebird/firebird2/src/dsql/parse.y


 
Loginov Dmitry ©   (2008-08-31 12:05) [12]

> select gen_id(GEN_N,(select max(field1)+1 from table1))
> from rdb$database


тогда уж так:

SELECT gen_id(GEN_TEST, -gen_id(GEN_TEST, 0) + (SELECT Max(ID) FROM TEST) + 1) FROM RDB$DATABASE


 
turbouser ©   (2008-08-31 19:41) [13]

Кстати, все правильно насчет
> что эта команда работает только с константой

т.к. DDL с DML низзя мешать в одну кучу :)



Страницы: 1 вся ветка

Текущий архив: 2009.04.26;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.014 c
6-1202258166
Alex603081
2008-02-06 03:36
2009.04.26
ClientSocket


6-1202650498
WebSQLNeederr
2008-02-10 16:34
2009.04.26
Как узнать текст внутри тега "а". То есть текст ссылки


2-1237205386
девушка
2009-03-16 15:09
2009.04.26
Аналог explod из PHP


2-1236067326
SKIPtr
2009-03-03 11:02
2009.04.26
Как программно свернуть программу


2-1236179016
Nil
2009-03-04 18:03
2009.04.26
Помогите разобраться с CallBack вызовами