Я так понял ситуацию: сначала формируем документ так, как он и формируется, 
т.е. через генератор, с возможностью пропуска номера при отмене генерации 
документа. При этом получаем "внутренний" ID документа, который "наружу" не 
светится. После этого, когда все уже готово, отдельно, из ДРУГОГО генератора 
берем серийный порядковый "наружный" номер. В этой операции какие-то исключения 
крайне маловероятны (дернуть генератор, и все), соответственно, риск пропуска 
номера крайне мал...
  "Vadim Mescheryakov" <[email protected]> сообщил/сообщила в 
новостях следующее: news:[email protected]...
   

   

  From: [email protected] [mailto:[email protected]] On 
Behalf Of Slava Ekimov
  Sent: Wednesday, March 03, 2010 10:11 AM
  To: [email protected]
  Subject: Re: Проблема с получением уникального номера документа

   

  >Проблема пропуска номера заключается в том что генератор получил следующее 
значение, а документ не сохранился в этой транзакции и будет создан со 
следующим номером при повторном вызове процедуры. Дублирование номеров то же 
освобождает слишком много негативной энергии. Можно ли как воспользоваться 
SAVEPOINT, или еще каким ни будь механизмом  что бы <подбирать> пропущенные 
номера документов?

   

  >Сначала записать документ с любым внутренним ID из генератора. А потом 
изменить видимый номер, в другой транзакции.

  А как же обеспечить целостность данных?

  Так можно получить документы без номеров. 

   

  Где то витает идея что получая новый номер регистрировать его в таблице типа 
<номера документов> 

  Нужно что то типа commit вставки если ошибка произошла.

   

  Из самой программы это сделать можно  - в двух параллельных транзакциях, но 
процедуры формирования создают несколько документов, сколько их получилось 
известно только в конце выполнения процедуры.

   

  Похожая проблема возникает когда нужно в базе данных регистрировать exception 
по которым прерываются выполнение процедур и триггеров, что бы протоколировать 
в таблице возникающие проблемы.

   

   

  С уважением, Мещеряков Вадим

   

  директор ООО "Комплексные Системы" 

  454021 г. Челябинск ул. 40 лет Победы 31, 77

  Тел: +7 (351) 2807917

  Моб: +7 922 6395170    

  Web: www.del-fin.ru

  ICQ: 343-554-572

  SKYPE: vadimmescheryakov

   

   

Ответить