====== AUTONOMOUS TRANSACTION ====== ===== Версии сервера ===== ^ 0.9 ^ 1.0 ^ 1.5.3 ^ 1.5.4 ^ 1.5.5 ^ 2.0 ^ 2.0.3 ^ 2.0.4 ^ 2.1 ^ 2.5 ^ 3.0 ^ | - | - | - | - | - | - | - | - | - | Да | Да | ===== Доступно в ===== [[raznovidnosti_jazyka_sql|DSQL]], [[raznovidnosti_jazyka_sql|ESQL]], [[raznovidnosti_jazyka_sql|ISQL]], [[raznovidnosti_jazyka_sql|PSQL]] ===== Формат ===== IN AUTONOMOUS TRANSACTION DO { | } ===== Описание ===== Данный оператор позволяет выполнять некоторый блок [[raznovidnosti_jazyka_sql|PSQL]]-кода в автономной транзакции. Основной областью применения данной конструкции может служить те случаи, когда Вам необходимо вызвать исключение, но Вы не хотите, чтобы изменения в базе данных были отменены в связи с откатом транзакции. Новая транзакция, вызываемая оператором IN AUTONOMOUS TRANSACTION DO, стартует с тем же уровнем изоляции, с каким выполняется основной [[raznovidnosti_jazyka_sql|PSQL]]-блок, вызвавший этот оператор. Любое исключение, вызванное или появившееся в блоке кода автономной транзакции приведет к откату автономной транзакции и отмене всех внесенных изменений. Если код будет выполнен успешно, то автономная транзакция будет подтверждена. ===== Пример ===== CREATE TABLE LOG ( LOGDATE TIMESTAMP ,MSG VARCHAR(60) ); CREATE EXCEPTION EX_CONN 'Отказано в доступе к базе данных !'; SET TERM !; CREATE TRIGGER TRIG_CONN01 ON CONNECT AS BEGIN IF (CURRENR_USER = 'НеверныйПользователь')THEN BEGIN IN AUTONOMOUS TRANSACTION DO BEGIN /* Этот кусок кода будет выполнен в автономной транзакции и вставка записи в таблицу протокола LOG будет произведена. */ INSERT INTO LOG (LOGDATE, MSG) VALUES (CURRENT_TIMESTAMP, 'Отказано в подключении пользователю '||CURRENR_USER ); END /* В основном PSQL-блоке вызываем исключение и транзакция завершится откатом. */ EXCEPTION EX_CONN; END END! SET TERM ;! ===== См. также ===== [[EXECUTE PROCEDURE]], [[EXECUTE STATEMENT]], [[EXECUTE BLOCK]], [[PROCEDURE]], [[TRIGGER]] ===== Источник ===== Firebird 2.5 Realise Notes http://firebirdsql.org/devel/doc/rlsnotes/html/rlsnotes25.html Пожелание пользователей № CORE-1409 http://tracker.firebirdsql.org/browse/CORE-1409