Где хранится значение генератора?

Запросы, планы, оптимизация запросов, ...

Модераторы: kdv, CyberMax

Ответить
Gage
Сообщения: 18
Зарегистрирован: 26 ноя 2005, 20:17

Где хранится значение генератора?

Сообщение Gage » 26 ноя 2005, 21:59

Проблема - динамически установить одним запросом значение генератора.

Код: Выделить всё

set generator genABC to 3650
не подходит, так как значение 3650 определяется динамически.
Хотелось бы что-то вроде такого

Код: Выделить всё

update rdb$generators
set rdb$generator_value = (select max(ID) from Table1)
where rdb$generator_name = 'GENABC'
Только вот поля rdb$generator_value там нет.
Где же храниться значение генератора?

(FB 1.5)

Merlin
Динозавр IB/FB
Сообщения: 1502
Зарегистрирован: 27 окт 2004, 11:44

Сообщение Merlin » 26 ноя 2005, 22:02

http://www.ibase.ru/devinfo/generator.htm

Тока читать целиком и вдумчиво.

Gage
Сообщения: 18
Зарегистрирован: 26 ноя 2005, 20:17

Сообщение Gage » 26 ноя 2005, 22:41

Прочитал вдумчиво еще раз.
Мало что дало. :?
Так все-таки можно или нет сделать одним запросом?

dimitr
Разработчик Firebird
Сообщения: 888
Зарегистрирован: 26 окт 2004, 16:20

Re: Где хранится значение генератора?

Сообщение dimitr » 27 ноя 2005, 09:08

Gage писал(а):Где же храниться значение генератора?
Там, куда ты не залезешь.
Gage писал(а):Так все-таки можно или нет сделать одним запросом?
Можно. Читай еще более вдумчиво.

Gage
Сообщения: 18
Зарегистрирован: 26 ноя 2005, 20:17

Сообщение Gage » 27 ноя 2005, 12:59

Код: Выделить всё

select gen_id(genMy, (select max(id) from table) - gen_id(genMy,0)) 
from rdb$database
Так? :)

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 27 ноя 2005, 17:34

ЕЩЕ раз прочитай про генераторы. Чего то люди совсем читать разучились. Я уж и статью целиком переписал, а все равно...

Gage
Сообщения: 18
Зарегистрирован: 26 ноя 2005, 20:17

Сообщение Gage » 27 ноя 2005, 19:19

В третий раз закинул старик невод.
И в третий раз не вытащил ничего нового. :)

Чем посылать меня к руководству, может скажешь, что ты имеешь ввиду?

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 28 ноя 2005, 10:14

зачем тебе select ? Ты чего хочешь сделать, лучше объясни. Начать отсчет генератора от максимального значения в таблице? Это на случай сбоев, или еще чего?

Ivan_Pisarevsky
Заслуженный разработчик
Сообщения: 644
Зарегистрирован: 15 фев 2005, 11:34

Сообщение Ivan_Pisarevsky » 28 ноя 2005, 11:08

Наверно, беспокойство, что значений генератора не хватит :lol: ...
Переход на 64 битное значение, думаю, 100% решит проблему нехватки номеров.
Ну можно, конечно, отсчитать значение генератора от максимума, только одна оговорка: это можно делать только в однопользовательском режиме.

Gage
Сообщения: 18
Зарегистрирован: 26 ноя 2005, 20:17

Сообщение Gage » 28 ноя 2005, 12:09

Да, видно сразу надо было по подроднее. Sorry.

Дого объяснять - задача, конечно, кривая.
Смысл вот в чем - надо в одном запросе установить и получить значение генератора в число, которое возвращает подзапрос.
Тот запрос, что я написал несколькими постами выше - работает.
Если есть решение "правильнее" - посоветуйте.

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 28 ноя 2005, 12:30

раз работает - используй. вопрос к тебе был - зачем ты так делаешь. В том смысле, не напорешься ли на конкурентное выполнение двух-трех таких запросов одновременно.

Gage
Сообщения: 18
Зарегистрирован: 26 ноя 2005, 20:17

Сообщение Gage » 28 ноя 2005, 12:47

Да. Это понятно. Само-собой, учтено.
Кстати, если есть возможность поправить - там в FAQе

Код: Выделить всё

TEMPVAR = GEN_ID(NEWCLIENT, -GEN_ID(NEWCLIENT, 0); 
скобки сзади не хватает.

Ivan_Pisarevsky
Заслуженный разработчик
Сообщения: 644
Зарегистрирован: 15 фев 2005, 11:34

Сообщение Ivan_Pisarevsky » 28 ноя 2005, 16:50

Селективная процедура+наращиваение локальной переменной будет нечувствительно к многопользовательскому режиму, в отличие от наращивания генератора.
Опять же почему не выполнить селект каунт(*) с тем же where что и подзапрос и получить количество без всяких генераторов.
Вобщем мне постановка не понятна...

Ответить