Доступные версии документации

Транзакции

Транзакция начинается с первого выполняемого SQL-оператора (кроме CONNECT) в пользовательской программе. Когда текущая транзакция заканчивается, следующая начинается с очередного исполняемого SQL-оператора обработки данных.

Декларативные операторы не являются элементами транзакций, поэтому к ним не применяются операции фиксирования или отката.

Операции определения данных всегда выполняются в режиме AUTOCOMMIT, т.е. откат этих операций не поддерживается. Например, если был выполнен оператор CREATE TABLE или ALTER TABLE, то отказаться от созданной таблицы или модификации ее структуры можно только путем явного удаления таблицы оператором DROP TABLE или (если это допустимо) последующей повторной модификацией.

Транзакция заканчивается одним из следующих способов:

  • выполнение операции COMMIT либо ROLLBACK, с или без опции RELEASE. Эти операторы фиксируют изменения в БД или выполняют откат к предыдущему состоянию;

  • выполнение любого SQL-оператора определения данных (например, ALTER, CREATE, GRANT), которые инициируют автоматическое подтверждение транзакции (COMMIT) перед своим выполнением;

  • транзакция автоматически завершается при аварийном завершении пользовательского приложения. В этом случае ядро выполняет операцию ROLLBACK;

  • транзакция автоматически завершается при аварийном завершении ядра СУБД ЛИНТЕР (например, при сбое оборудования или отказе операционной системы). В этом случае при рестарте ядра СУБД незавершенная (прерванная) транзакция также выполняет откат.

Фиксация транзакции

Назначение

Для сохранения изменений, произведенных в БД в процессе выполнения транзакции, служит операция подтверждения транзакции.

Синтаксис

 
<подтверждение транзакции>::=
EXEC SQL [AT <имя соединения> ] COMMIT [WORK|RELEASE];

Описание

  1. <Имя соединения> задает ранее открытое соединение. Значение параметра может быть задано переменной типа «соединение» либо символьной константой. В любом случае заданное значение должно быть ранее использовано в операторе CONNECT. Если параметр <имя соединения> опущен, фиксация транзакции выполняется для неименованного канала. При выполнении оператора осуществляется фиксация изменений в БД как по указанному соединению, так и по всем активным дочерним каналам (курсорам).

  2. Если задан режим WORK, то после сохранения изменений работа с БД по данному соединению может быть продолжена.

  3. Если задан режим RELEASE, то после сохранения изменений соединение с СУБД закрывается.

  4. По умолчанию применяется режим WORK. Для отсоединения от СУБД рекомендуется явно использовать оператор DISCONNECT.

Примечание

Запрос на фиксацию транзакции имеет смысл задавать только в режимах OPTIMISTIC, EXCLUSIVE, т.к. в режиме AUTOCOMMIT изменения сразу фиксируются в БД.

Откат транзакции

Назначение

Отказ от произведенных в БД изменений в процессе выполнения транзакции.

Синтаксис

 
<откат транзакции>::=
   EXEC SQL [AT <имя соединения> ] ROLLBACK [WORK|RELEASE];

Описание

  1. <Имя соединения> задает ранее открытое соединение. Значение параметра может быть задано переменной типа «соединение» либо символьной константой. В любом случае заданное значение должно быть ранее использовано в операторе CONNECT. Если параметр <имя соединения> опущен, откат транзакции выполняется для неименованного соединения. Оператор выполняет откат транзакции как по соединению, так и по всем активным дочерним каналам (курсорам).

  2. Если задан режим WORK, то после отката изменений работа с БД по данному соединению может быть продолжена.

  3. Если задан режим RELEASE, то после отката изменений соединение с СУБД закрывается.

  4. По умолчанию применяется режим WORK. Для отсоединения от СУБД рекомендуется явно использовать оператор DISCONNECT.

Примечание

Откат транзакции имеет смысл задавать только в режимах OPTIMISTIC, EXCLUSIVE, т.к. в режиме AUTOCOMMIT изменения сразу фиксируются в БД.

Заметили ошибку?
Выделите текст и нажмите Ctrl + Enter