Страница 1 из 1
Где хранится значение генератора?
Добавлено: 26 ноя 2005, 21:59
Gage
Проблема - динамически установить одним запросом значение генератора.
не подходит, так как значение 3650 определяется динамически.
Хотелось бы что-то вроде такого
Код: Выделить всё
update rdb$generators
set rdb$generator_value = (select max(ID) from Table1)
where rdb$generator_name = 'GENABC'
Только вот поля rdb$generator_value там нет.
Где же храниться значение генератора?
(FB 1.5)
Добавлено: 26 ноя 2005, 22:02
Merlin
Добавлено: 26 ноя 2005, 22:41
Gage
Прочитал вдумчиво еще раз.
Мало что дало.
Так все-таки можно или нет сделать одним запросом?
Re: Где хранится значение генератора?
Добавлено: 27 ноя 2005, 09:08
dimitr
Gage писал(а):Где же храниться значение генератора?
Там, куда ты не залезешь.
Gage писал(а):Так все-таки можно или нет сделать одним запросом?
Можно. Читай еще более вдумчиво.
Добавлено: 27 ноя 2005, 12:59
Gage
Код: Выделить всё
select gen_id(genMy, (select max(id) from table) - gen_id(genMy,0))
from rdb$database
Так?

Добавлено: 27 ноя 2005, 17:34
kdv
ЕЩЕ раз прочитай про генераторы. Чего то люди совсем читать разучились. Я уж и статью целиком переписал, а все равно...
Добавлено: 27 ноя 2005, 19:19
Gage
В третий раз закинул старик невод.
И в третий раз не вытащил ничего нового.
Чем посылать меня к руководству, может скажешь, что ты имеешь ввиду?
Добавлено: 28 ноя 2005, 10:14
kdv
зачем тебе select ? Ты чего хочешь сделать, лучше объясни. Начать отсчет генератора от максимального значения в таблице? Это на случай сбоев, или еще чего?
Добавлено: 28 ноя 2005, 11:08
Ivan_Pisarevsky
Наверно, беспокойство, что значений генератора не хватит

...
Переход на 64 битное значение, думаю, 100% решит проблему нехватки номеров.
Ну можно, конечно, отсчитать значение генератора от максимума, только одна оговорка: это можно делать только в однопользовательском режиме.
Добавлено: 28 ноя 2005, 12:09
Gage
Да, видно сразу надо было по подроднее. Sorry.
Дого объяснять - задача, конечно, кривая.
Смысл вот в чем - надо в одном запросе установить и получить значение генератора в число, которое возвращает подзапрос.
Тот запрос, что я написал несколькими постами выше - работает.
Если есть решение "правильнее" - посоветуйте.
Добавлено: 28 ноя 2005, 12:30
kdv
раз работает - используй. вопрос к тебе был - зачем ты так делаешь. В том смысле, не напорешься ли на конкурентное выполнение двух-трех таких запросов одновременно.
Добавлено: 28 ноя 2005, 12:47
Gage
Да. Это понятно. Само-собой, учтено.
Кстати, если есть возможность поправить - там в FAQе
Код: Выделить всё
TEMPVAR = GEN_ID(NEWCLIENT, -GEN_ID(NEWCLIENT, 0);
скобки сзади не хватает.
Добавлено: 28 ноя 2005, 16:50
Ivan_Pisarevsky
Селективная процедура+наращиваение локальной переменной будет нечувствительно к многопользовательскому режиму, в отличие от наращивания генератора.
Опять же почему не выполнить селект каунт(*) с тем же where что и подзапрос и получить количество без всяких генераторов.
Вобщем мне постановка не понятна...