Oleg LOA wrote:
В данном случае можно создать генератор номеров у которго будет своя таблица.
Я когда-то даже придумал такой,
http://konstb.newmail.ru/interbase/gennum.htm
а все тут спросили: ну и зачем? :-)
Константин [EMAIL PROTECTED] wrote in message news:[EMAIL PROTECTED]
А если серьёзно, кто что думает по этому поводу ?
Предлагаю подумать на следующие темы самостоятельно;
1) Сериализация доступа к механизму создания новых номеров
2) Параметрытранзакции lock_writе и wait
Тебе нужна сериализация.
При генерации нового документа запускаешь транзакцию с параметрами
wait
lock_write=имя_некой_таблицы
protected
Такие транзакции будут сериализованы. Внутри вычисляешь
номер нового документа обычными sql операторами.
--
--- Home Page http://ok.novgorod.net/ap ---
Константин wrote:
Вопрос: когда я, с таким подходом, напорюсь на грабли ? И на какие ?
CREATE PROCEDURE DOC_PROVODKA (
doc_id bigint)
as
declare variable i bigint;
declare variable tid bigint;
declare variable ftid bigint;
begin
// Stop - семафор,
// sleep - UDF наподобие
Alexey Popov wrote:
Тебе нужна сериализация.
При генерации нового документа запускаешь транзакцию с параметрами
wait
lock_write=имя_некой_таблицы
protected
Такие транзакции будут сериализованы. Внутри вычисляешь
номер нового документа обычными sql операторами.
Мля, на колу мочало,
Константин пишет:
Hi, многоуважаемый All!
Есть табличка шапок документов скажем
CREATE TABLE DOC ( IDBIGINT, TYPE_ID BIGINT, DATE_DOC
TIMESTAMP, NUM BIGINT, UserNUM BIGINT, From_ID BIGINT,
TO_ID BIGINT, ... );
1) Есть условие что нумерация (NUM) для каждого
Ded wrote:
Такие транзакции будут сериализованы. Внутри вычисляешь
номер нового документа обычными sql операторами.
Мля, на колу мочало, начинай сначала, 2001-й год вроде, учител Йода
вернулся. Чтоб удержать одну запись, крайне необходимо блокировать
таблицу целиком. МП, крутани ПНХ
Что если создавать для каждого нового типа документов свой генератор,
по аналогии как в Firebird создаются домены RDB$X
Константин wrote:
По типу документа ещё можно ...
А по контрагенту ?
Что скажут кодописатели насчёт ~5000 генераторов ? :)
Я не знаю точно, но какое-то ограничение на к-во генераторов
существует же ...
Странный ты, ей-богу. Тыщу раз говорили ведь - при создании
Константин пишет:
// Stop - семафор,
// sleep - UDF наподобие Application.ProcessMessages в Delphi
while (gen_id(stop, 0) 0)) do sleep(100);
i = gen_id(stop, 1);
Хм, sleep... Чего уж мелочиться, давай сразу
CreateMutex/WaitForSingleObject/ReleaseMutex :)
--
wbr, ps
ps-at-azs-ru
10 matches
Mail list logo