Константин пишет:
Hi, многоуважаемый All!

Есть табличка шапок документов скажем

CREATE TABLE DOC ( ID        BIGINT, TYPE_ID   BIGINT, DATE_DOC
TIMESTAMP, NUM BIGINT, UserNUM BIGINT, From_ID BIGINT, TO_ID BIGINT, ........... );

1) Есть условие что нумерация (NUM) для каждого типа документов
(type_id) должна быть уникальной

2) Есть условие что для каждого контрагента получателя (To_ID), в
зависимости от типа документа (Type_id) идёт своя нумерация

Привет!

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

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


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

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

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

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

--
Удачи!

Shiliaev Ruslan

Ответить