Форум: "Базы";
Текущий архив: 2009.04.26;
Скачать: [xml.tar.bz2];
ВнизИзменение текущего значения генератора Найти похожие ветки
← →
Евгений Р. (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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.005 c