Из любопытства я сделал простой тест, чтобы подтвердить, что обработка страницы происходит в одну транзакцию:
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 автоматически зафиксировалась при успешном выполнении последнего блока. Так что будьте осторожней, управляя фиксацией и откатом в Вашем коде - Вы можете повлиять на результаты предыдущих блоков.
Комментариев нет:
Отправить комментарий