Конференция "Базы" » Изменение текущего значения генератора [D7, fb2]
 
  • Евгений Р. (28.08.08 23:25) [0]
    После перекачивания данных со старой программы в новую хочу установить значение генератора:
    ALTER SEQUENCE GEN_N RESTART WITH
             (select max(field1)+1
              from table1)


    похоже, что эта команда работает только с константой?
  • Евгений Р. (28.08.08 23:30) [1]
    аналогично SET GENERATOR
  • turbouser © (29.08.08 06:11) [2]
    Может так устроит?
    select gen_id(GEN_N,(select max(field1)+1 from table1)) from rdb$database

  • Евгений Р. (29.08.08 14:45) [3]
    т.е. в 2 запроса:
    1- обнулить его
    2- [2] инкременировать на нужную величину?
  • turbouser © (29.08.08 14:57) [4]

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

    Зачем в 2 запроса ? при выполнении запроса из [2] GEN_N будет иметь значение max(field1)+1
    Какой смысл обнулять?
  • turbouser © (29.08.08 14:59) [5]
    Присвоение значения генератору происходит вне контекста транзакции
  • Евгений Р. (29.08.08 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 © (29.08.08 15:38) [7]

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

    А, точно, там же инкремент...
  • Евгений Р. (29.08.08 15:54) [8]
    А всеже ALTER SEQUENCE GEN_N RESTART WITH nn работает только с константой?
  • turbouser © (29.08.08 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))); }



    Если я правильно понял - то только константа.
  • Евгений Р. (29.08.08 16:31) [10]

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

    а как Вы это получили?
  • turbouser © (29.08.08 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 © (31.08.08 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 © (31.08.08 19:41) [13]
    Кстати, все правильно насчет
    > что эта команда работает только с константой

    т.к. DDL с DML низзя мешать в одну кучу :)
 
Конференция "Базы" » Изменение текущего значения генератора [D7, fb2]
Есть новые Нет новых   [134473   +28][b:0][p:0.001]