Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / APEX режим DEBUG криво работают функции с pragma autonomous_transaction; / 3 сообщений из 3, страница 1 из 1
27.06.2013, 14:25
    #38312665
Casufi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
APEX режим DEBUG криво работают функции с pragma autonomous_transaction;
Перехожу в апексе в режим отладки (кнопка DEBUG) на нижней панели в приложении. В результате функция, объявленная как pragma autonomous_transaction; коммитит изменения
...
Рейтинг: 0 / 0
27.06.2013, 14:58
    #38312734
Casufi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
APEX режим DEBUG криво работают функции с pragma autonomous_transaction;
Как проверял
Вот кусок кода:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
  SELECT count(*)
  into l_uncommitted
  FROM v$session v
  WHERE v.AUDSID = userenv('sessionid') AND v.TADDR IS NOT NULL;
  
  APEX_DEBUG_MESSAGE.LOG_LONG_MESSAGE(
    p_message => 'КОММИТ: <<'||l_uncommitted||'>>',
    p_level => 1);
  
  trace_dm.WriteLog(message => 'КОММИТ: <<'||l_uncommitted||'>>'); 
      
  l_opr_seq := GetOperSeq4DateAt(
    p_opr => p_opr_id,
    p_dpr => p_opr_dpr,
    p_date => p_opr_dt,
    p_day_place => p_day_place);
    

  SELECT count(*)
  into l_uncommitted
  FROM v$session v
  WHERE v.AUDSID = userenv('sessionid') AND v.TADDR IS NOT NULL;
  
  APEX_DEBUG_MESSAGE.LOG_LONG_MESSAGE(
    p_message => 'КОММИТ: <<'||l_uncommitted||'>>',
    p_level => 1);
  
  trace_dm.WriteLog(message => 'КОММИТ: <<'||l_uncommitted||'>>');  



Где trace_dm - свой пакет, который пишет лог в файл на сервере, а GetOperSeq4DateAt - функция объявленая как return number is pragma autonomous_transaction;

При включенном дебаге в лог файле получаю 1,0, а при выключенном 1,1
...
Рейтинг: 0 / 0
27.06.2013, 19:57
    #38313288
suPPLer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
APEX режим DEBUG криво работают функции с pragma autonomous_transaction;
Casufi,

не подтверждается.

создаём процедуру с автономной транзакцией:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
create or replace procedure p 
as
  pragma autonomous_transaction;
  l_dummy number;
begin
  select deptno into l_dummy from dept where deptno = 10 for update;
  dbms_output.put_line('a un:'||dbms_transaction.local_transaction_id);

  commit;
  dbms_output.put_line('a cm:'||dbms_transaction.local_transaction_id);
end;
/



И дальше несколько раз выполняем в SQL Commands:
Код: plsql
1.
2.
3.
4.
5.
6.
begin
 dbms_output.put_line('t be:'||dbms_transaction.local_transaction_id);   
 p;
 dbms_output.put_line('t af:'||dbms_transaction.local_transaction_id);
end;
/



Можно закомментировать вызов процедуры, добавить APEX_DEBUG.enable или COMMIT в разные места кода, но суть одна: при повторных обращениях к серверу APEX выполняет что-то, что начинает транзакцию, и APEX_DEBUG на это не влияет. Предполагать, с чем это связано, пока нет желания. Но фиксации родительской транзакции дочерней автономной не вижу.
...
Рейтинг: 0 / 0
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / APEX режим DEBUG криво работают функции с pragma autonomous_transaction; / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]