Форум: "Базы";
Текущий архив: 2003.05.29;
Скачать: [xml.tar.bz2];
ВнизУстановка значения generator Найти похожие ветки
← →
stkatch (2003-05-12 11:32) [0]Уважаемые мастера!
Можно ли установить значение generatora в процедуре IB?
Установка "в лоб":
CREATE PROCEDURE SetGenerator
BEGIN
SET GENERATOR generator_1 TO 0;
END
не проходит :-(
← →
Johnmen (2003-05-12 11:38) [1]CREATE PROCEDURE SetGenerator
DECLARE VARIABLE NG INTEGER;
BEGIN
NG=GenId(generator_1,-GenId(generator_1,0));
END
← →
Johnmen (2003-05-12 11:40) [2]Конечно же GEN_ID ! :)))
← →
Zacho (2003-05-12 11:42) [3]
> stkatch (12.05.03 11:32)
В Yaffil - можно и SET GENERATOR в ХП.
А ты уверен, что нужно ?
Генераторы работают вне контекста транзакций, поэтому при многопользовательской работе вполне можешь получить аномалии.
← →
stkatch (2003-05-12 11:53) [4]> Zacho
Вообще мне нужен счетчик, который пользователь мог бы обнулить по своему желанию
← →
Zacho (2003-05-12 11:59) [5]
> stkatch (12.05.03 11:53)
Хорошенько подумай, не возникнет ли каких-либо коллизий при многопользовательской работе. И еще момент: в качестве счетчика генераторы мало подходят, т.к. откат транзакции никак не изменяет значение генератора. Хотя, может именно для твоей задачи и подойдет.
← →
Соловьев (2003-05-12 12:05) [6]
> Вообще мне нужен счетчик, который пользователь мог бы обнулить
> по своему желанию
жестоко ты со счетчиком... а он отвечает за PK? или просто так?
может для PK - пусть работает, а для юзера свой завести? что хоть за задача?
← →
stkatch (2003-05-12 12:10) [7]> Соловьев
Конечно для PK свой отдельный генератор. Суть в следущем. Есть список заказов у которых должно быть два идентификационных номера: глобальный (PK) и второй, в рамках смены. Когда смена закрывается счетчик должен обнуляться и в следущей смене опять начинаться с единицы. А какие еще возможны варианты?
← →
Zacho (2003-05-12 12:15) [8]
> stkatch (12.05.03 12:10)
Все зависит от того, как должна идти нумерация. В случае с генератором: пользователь вносит новый заказ. По каким-либо причинам транзакция откатывается. В результате получается "дырка" в нумерации заказов. Если такое устраивает - генераторы самое то.
← →
Соловьев (2003-05-12 12:16) [9]
> А какие еще возможны варианты?
вычислять номер - не просто число, а например дата+время или еще чего-нибудь.
← →
stkatch (2003-05-12 12:25) [10]> Zacho
Да дырки это не очень приятно, и являются основной проблемой. А вообще есть какие нить элегантные способы вести возрастающую целочисленную уникальную нумерацию без пропусков?
← →
Zacho (2003-05-12 12:31) [11]
> stkatch (12.05.03 12:25)
Элегантных - нет. Общий способ:
Работа с таблицей в "однопользовательском" режиме. (Т.е. блокирование модификации данных другими транзакциями до окончания создания документа)
Запрет изменения номеров в уже введенных документах.
Запрет удаления документов, или перерасчет номер после удаления.
← →
stkatch (2003-05-12 12:35) [12]А как в IB заблокировать таблицу на вставку данных?
← →
Zacho (2003-05-12 12:40) [13]Смотри http://www.ibase.ru/devinfo/pslock.htm и http://www.ibase.ru/devinfo/ibtrans.htm
← →
stkatch (2003-05-12 12:55) [14]> Zacho
Спасиб!
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2003.05.29;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.007 c