SR> Заведи таблицу с номерами для разных получателей и типов документов:

SR> CREATE TABLE DOC_NUM(
SR>         TO_ID BIGINT NOT NULL,
SR>         TYPE_ID BIGINT NOT NULL,
SR>         MAX_DOC_NUM INT NOT NULL);


SR> ALTER TABLE DOC_NUM ADD CONSTRAINT PK_DOC_NUM PRIMARY KEY (TO_ID, TYPE_ID);

SR> В триггере на BI что то типа:
SR> ...
SR> IF (EXISTS(SELECT 1 FROM DOC_NUM WHERE TO_ID = NEW.TO_ID AND TYPE_ID =
SR> NEW.TYPE.ID)) THEN
SR>         UPDATE DOC_NUM SET MAX_DOC_NUM = MAX_DOC_NUM + 1 WHERE TO_ID =
SR> NEW.TO_ID AND TYPE_ID = NEW.TYPE.ID;
SR> ELSE
SR>         INSERT INTO DOC_NUM(TO_ID, TYPE_ID, MAX_DOC_NUM) VALUES (NEW.TO_ID,
SR> NEW.TYPE_ID, 1);

SR> SELECT MAX_DOC_NUM FROM DOC_NUM WHERE TO_ID = NEW.TO_ID AND TYPE_ID =
SR> NEW.TYPE.ID INTO NEW.NOM;

SR> И пиши в коротких R/C транзакциях. В случае облома - sleep(100) и пробуй
SR> еще.

    Чёй-то я не понял ... Помоему тут можно наткнутся на 2 одинаковых
    номера ... надо подумать ... Но всё равно спасибо ...

С уважением,
Константин Григорьевич.
===============
Двоечник на любое - Надо! отвечает - Зачем?


Ответить