Тук са показани разликите между избраната и текущата версия на страницата.
Both sides previous revisionПредходна версияСледваща версия | Предходна версия | ||
kak_da:spravki_scriptove [2020/07/31 05:57] – [Ново] t.lalova | kak_da:spravki_scriptove [2020/07/31 10:59] (текуща) – [Системна процедура SYS$SLEEP] t.lalova | ||
---|---|---|---|
Ред 1301: | Ред 1301: | ||
</ | </ | ||
- | ===== Ново ===== | + | ===== Системна процедура SYS$SLEEP |
- | < | + | Функция **SYS$SLEEP** служи за прекъсване на изпълнението на процедура, |
+ | Може да се използва в случай на заключване на записи и изчакване за последващото освобождаване. | ||
+ | |||
+ | Пример 1: Използване на процедурата в стейтмънт за извличане на номер от автоматична номерация (кочан). | ||
+ | |||
+ | < | ||
| | ||
if (DOC_NUM_GENERATOR_REF is not null) then | if (DOC_NUM_GENERATOR_REF is not null) then | ||
Ред 1418: | Ред 1423: | ||
: | : | ||
- | </ | + | </ |
+ | |||
+ | Пример 2: Показва изпълнението само в случая за изтегляне на номер и изчакването за следващ опит. Този пример е част от горната процедура. | ||
+ | |||
+ | При изтегляне на номер на фактура от кочан се извършва ъпдейт и изтегляне на номера в една транзакция. Ако транзакцията продължи около 1 секунда, | ||
+ | |||
+ | В този случай при грешка можем да изчакаме определено време (колкото преценим, | ||
+ | Пример за точно такова изчакване е в следващия пример: | ||
+ | |||
+ | <code pascal> | ||
+ | | ||
+ | | ||
+ | while ((repeat_count < 5) and (NEW_DOC_NUMBER is null)) do | ||
+ | | ||
+ | repeat_count = repeat_count + 1; | ||
+ | NEW_DOC_NUMBER = null; | ||
+ | update | ||
+ | NOM$DOC_NUM_GENERATORS G | ||
+ | set | ||
+ | G.CURRENT_VALUE = G.CURRENT_VALUE + 1 | ||
+ | where | ||
+ | G.ID = : | ||
+ | returning | ||
+ | G.CURRENT_VALUE - 1 | ||
+ | into | ||
+ | : | ||
+ | when any do | ||
+ | begin | ||
+ | execute procedure SYS$SLEEP(200); | ||
+ | NEW_DOC_NUMBER = null; | ||
+ | end | ||
+ | end | ||
+ | if (NEW_DOC_NUMBER is null) then | ||
+ | exception CLEAN_TEXT_ERROR '' | ||
+ | |||
+ | </ |