RESTORE_CURSORS
Синтаксис
CONST
RC_OFF = 0;
RC_ON = 1; |
Описание
Набор именованных констант для управления режимом восстановления позиций
предопределенных курсоров при успешном выходе из TRY-блока, т.е.
при фиксации уровня транзакции. Управляет этим режимом атрибут
RESTORE_CURSORS TRY-блока:
- RC_OFF - сразу после выхода из TRY-блока все курсоры будут иметь те же позиции,
что и непосредственно перед выходом из TRY-блока. Но это правило
распространяется только курсоры, в которых позиция была явно
установлена внутри TRY-блока. Если при входе в TRY-блок с
подчиненной транзакцией
позиция курсора автоматически сбросилась, т.к. в главной транзакции она
заблокирована монопольно или конкурентно, а внутри TRY-блока не было явного
позиционирования, то на выходе из TRY-блока позиция восстановится к
состоянию перед входом в TRY-блок.
- RC_ON - сразу после выхода из
TRY-блока все курсоры будут иметь те же позиции, что и
непосредственно перед входом в TRY-блок, но с учетом выполненных
внутри TRY-блока модификаций
При выходе из TRY-блока по исключению
курсоры всегда имеют те же позиции, что и непосредственно перед входом в
TRY-блок.
Пример (схематично):
FIRST(File1); (* спозиционировались на 110 *)
FIRST(File2); (* спозиционировались на 210 *)
FIRST(File3); (* спозиционировались на 310 *)
FIRST(File4); (* спозиционировались на 410 *)
TRY[RESTORE_CURSORS( ? )]
LAST(File1); (* спозиционировались на 190 *)
REPLACE(File2); (* изменили значение с 210 на 220 *)
REMOVE(File3); (* удалили запись 310, текущая 320 *)
IF (* нужно исключение *) THEN
RAISE(N);
END;
EXCEPT
END;
- Если атрибут RESTORE_CURSORS имел значение RC_OFF (оно же по умолчанию),
при успешном выходе из TRY: File1 имеет позицию 190; File2 - 220; File3 -
320; File4 - 410.
- Если атрибут RESTORE_CURSORS имел значение RC_ON, при успешном выходе из
TRY: File1 имеет позицию 110; File2 - 220; File3 - нет позиции, т.к. запись
310 удалена; File4 - 410.
- При выходе из TRY по исключению: File1 имеет позицию 110; File2 -
210; File3 - 310; File4 - 410.