Автономная транзакция в Oracle PL / SQL: Commit, Rollback

Андрей Васенин

Андрей Васенин

Автор статьи. Сфера интересов: ИТ-специалист (программирование, администрирование, DBA). Кандидат экономических наук. Подробнее .

Что такое автономная транзакция Oracle PL/SQL?Что такое TCL-операторы в PL / SQL?

Операторы TCL означает используются для контроля транзакций в базе данных Oracle. Такой оператор либо сохранит ожидающие транзакции (Commit), либо откатит ожидающую транзакцию (Rollback). Эти операторы играют жизненно важную роль, потому что, если транзакция не сохранена, изменения через операторы DML не будут сохранены в базе данных. Ниже приведены различные операторы TCL.


Оглавление статьи[Показать]


COMMIT

 Сохраняет все ожидающие (pending) транзакции

ROLLBACK

 Отменяет все ожидающие транзакции

SAVEPOINT

 Создает контрольную точку в транзакции, до которой откат может быть выполнен позже

ROLLBACK TO

 Отменить все ожидающие транзакции до указанной <точки сохранения> (<save point>)

Транзакция будет завершена в следующих сценариях.

 

Что такое автономная транзакция

В PL / SQL все изменения, сделанные в данных, будут называться транзакцией. Транзакция считается завершенной, когда к ней применено сохранение (Commit) / сброс (Rollback). Если сохранение / удаление не задано, транзакция не будет считаться завершенной, и изменения, внесенные в данные, не будут выполнены на сервере на постоянной основе (не будут зафиксированными в базе).

Независимо от некоторых модификаций, выполненных во время сеанса, PL / SQL будет рассматривать всю модификацию как одну транзакцию, а сохранение / отмена этой транзакции влияет на все ожидающие изменения в этом сеансе. Автономная транзакция предоставляет функциональность разработчику, в которой она позволяет вносить изменения в отдельную транзакцию и сохранять / отменять эту конкретную транзакцию, не затрагивая основную транзакцию сеанса.

 

Свойства автономных транзакций

 

Синтаксис автономной транзакции

DECLARE
   PRAGMA AUTONOMOUS_TRANSACTION; 
   ...

BEGIN
   <Основной блок программы>
   [COMMIT|ROLLBACK]
END;
/

 В приведенном выше синтаксисе блок был выполнен как автономная транзакция.

 

Примеры кода PL/SQL с автономной транзакцией

В этом примере мы собираемся понять, как работает автономная транзакция. Блоки основной и автономной транзакции приведены на рисунке ниже:

Автономная и основная транзакция

DECLARE
L_salary NUMBER;	‬
  IS
  PRAGMA AUTONOMOUS_TRANSACTION;
  BEGIN
  UPDATE emp
  SET salary=salary+15000
  WHERE emp_no=1002;
  COMMIT;
 E ND;‭	‬
BEGIN
   SELECT salary INTO l_salary FROM emp WHERE emp_no=1001; 
   Dbms_output.put_line(‘Before: Salary of 1001 is‘||l_salary); 
   SELECT salary INTO l_salary FROM emp WHERE emp_no=1002;
   Dbms output.put_line(‘Before: Salary of 1002 is‘||1_salary):
   UPDATE emp
      SET salary=salary+5000
   WHERE emp_no=1001;
   Nested_block;
   ROLLBACK;
   SELECT salary INTO l_salary FROM emp WHERE emp_no=1001;
   Dbms_output.put_line(‘After: Salary of 1001 is‘||l_salary);
   SELECT salary INTO l_salary FROM emp WHERE emp_no=1002;
   Dbms_output.put_line(‘After: Salary of 1002 is‘||l_salary);
END:
/

Результат выполнения кода:

Before:Salary of 1001 is 15000 
Before:Salary of 1002 is 10000 
After:Salary of 1001 is 15000 
After:Salary of 1002 is 25000

Объяснение кода:

Строка 2: объявление l_salary как NUMBER.

Строка 3: объявление процедуры nested_block

Строка 4: Создание процедуры nested_block как «AUTONOMOUS_TRANSACTION»

Строки 7-9: повышение зарплаты сотруднику с номером 1002 на 15000.

Строка 10: фиксация транзакции

Строки 13-16: печать сведений о зарплате сотрудника 1001 и 1002 до внесения изменений

Строки 17-19: повышение зарплаты сотруднику № 1001 на 5000

Строки 20: вызов процедуры nested_block

Строки 21: отмена основной транзакции

Строки 22-25: печать сведений о зарплате сотрудника 1001 и 1002 после изменений.

Увеличение зарплаты сотруднику с номером 1001 не отразится в результате, поскольку основная транзакция была отклонена. Увеличение заработной платы сотрудника с номером 1002 отражено, поскольку этот блок был выполнен как отдельная (автономная) транзакция и сохранен в конце.

Таким образом, независимо от сохранения / отмены в основной транзакции, изменения в автономной транзакции были сохранены без изменения основных транзакций.

 

Вас заинтересует / Intresting for you:

Управление приложениями PL/SQL...
Управление приложениями PL/SQL... 4633 просмотров Stas Belkov Thu, 16 Jul 2020, 06:20:48
Встроенные методы коллекций PL...
Встроенные методы коллекций PL... 14737 просмотров sepia Tue, 29 Oct 2019, 09:54:01
Автономные транзакции на языке...
Автономные транзакции на языке... 20406 просмотров sepia Fri, 17 Aug 2018, 13:57:11
Основы языка PL/SQL: использов...
Основы языка PL/SQL: использов... 4693 просмотров Ирина Светлова Tue, 06 Feb 2018, 14:04:03
Печать
Войдите чтобы комментировать