Инструменты пользователя

Инструменты сайта


autonomous_transaction

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Both sides previous revision Предыдущая версия
Следущая версия
Предыдущая версия
autonomous_transaction [2008/07/30 14:42]
peaktop
autonomous_transaction [2008/08/13 03:21] (текущий)
Строка 1: Строка 1:
 +====== 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]]
 +
 +===== Формат =====
 +<code sql>
 +IN AUTONOMOUS TRANSACTION DO
 +  { <simple statement>​ | <​compound statement>​ }
 +</​code>​
 +
 +===== Описание =====
 +
 +Данный оператор позволяет выполнять некоторый блок [[raznovidnosti_jazyka_sql|PSQL]]-кода в автономной транзакции. Основной областью применения данной конструкции может служить те случаи,​ когда Вам необходимо вызвать исключение,​ но Вы не хотите,​ чтобы изменения в базе данных были отменены в связи с откатом транзакции.
 +
 +Новая транзакция,​ вызываемая оператором IN AUTONOMOUS TRANSACTION DO, стартует с тем же уровнем изоляции,​ с каким выполняется основной [[raznovidnosti_jazyka_sql|PSQL]]-блок,​ вызвавший этот оператор. Любое исключение,​ вызванное или появившееся в блоке кода автономной транзакции приведет к откату автономной транзакции и отмене всех внесенных изменений. Если код будет выполнен успешно,​ то автономная транзакция будет подтверждена.
 +
 +===== Пример =====
 +<code sql>
 +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 ;!
 +</​code>​
 +
 +===== См. также =====
 +
 +[[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
  
autonomous_transaction.txt · Последние изменения: 2008/08/13 03:21 (внешнее изменение)