Oracle DB, Oracle APEX, Linux etc.

суббота, 20 ноября 2010 г.

Oracle APEX: Сколько транзакций в фазе Page Processing?

И правильный ответ... Одна.

Из любопытства я сделал простой тест, чтобы подтвердить, что обработка страницы происходит в одну транзакцию:

0. Создал таблицу и пакет для лога.

create table processing_steps (ordr number, msg varchar2(1000 char));

create or replace package proc_stp_pkg
as
  procedure reset;
  procedure add(p_ordr number, p_msg varchar2);
  procedure add_auton(p_ordr number, p_msg varchar2);
end proc_stp_pkg;
/

create or replace package body proc_stp_pkg
as
  procedure reset
  is
    pragma autonomous_transaction;
  begin
    delete processing_steps;
    commit;
  end;
  
  procedure add(p_ordr number, p_msg varchar2)
  is
  begin
    insert into processing_steps(ordr, msg) values (p_ordr, p_msg);
  end;
  
  procedure add_auton(p_ordr number, p_msg varchar2)
  is
    pragma autonomous_transaction;
  begin
    add(p_ordr=>p_ordr, p_msg=>p_msg);
  
    commit;
  exception
    when others then 
      rollback;
      raise;
  end;
end proc_stp_pkg;
/

1. Создал в APEX страницу с процессом перед проверками, вычислением, проверкой и процессом после вычисления. В каждом из них есть строки:

rollback;
proc_str_pkg.add(..., '...');
proc_str_pkg.add_auton(..., '...');

2. Добавил кнопку и переход на эту же страницу при нажатии.
3. Запустил страницу и нажал на кнопку.
4. Выполнил запрос:

SQL> set pages 9999 line 200
SQL> column msg format a50
SQL> select * from processing_steps
  2  order by ordr;

      ORDR MSG
---------- --------------------------------------------------
         1 Pr: On Submit - Before Computations and Validation
           s - Autonomous Transaction

         3 Computation - Autonomous Transaction
         5 Validation - Autonomous Transaction
         6 Pr: On Submit - After Computations and Validations
         7 Pr: On Submit - After Computations and Validations
            - Autonomous Transaction


SQL>

Пропущенные вставки 0, 2 и 4 откатывались оператором ROLLBACK в последующих блоках обработки. Вставка 6 автоматически зафиксировалась при успешном выполнении последнего блока. Так что будьте осторожней, управляя фиксацией и откатом в Вашем коде - Вы можете повлиять на результаты предыдущих блоков.

Комментариев нет:

Отправить комментарий