DBMS_PROFILER и EXCEPTION часть процедуры

gri4
Дата: 02.03.2007 16:04:33
Такой ворпос:

Запускаю код

BEGIN
dbms_profiler.start_profiler;
M_PKG.Set_Setting(p1 => 666, p2 => 'K');
dbms_profiler.flush_data;
dbms_profiler.stop_profiler;
END;

При таких входных параметрах в M_PKG.Set_Setting будет EXCEPTION. Проблема в том, что в таблицы
PLSQL_PROFILER_DATA
PLSQL_PROFILER_UNITS
PLSQL_PROFILER_RUNS
ничего не записывается, а мне нужно проанализировать обработку исключения. Как заставить profiler обрабатывать EXCEPTION блок?

еще вот что заметил, если запустить M_PKG.Set_Setting из test в PL/SQL Developer то таблицы
PLSQL_PROFILER_DATA
PLSQL_PROFILER_UNITS
PLSQL_PROFILER_RUNS
будут заполнены
Nike_K
Дата: 02.03.2007 16:51:08
Я правильно понимаю, что у вас процедура выбрасывает исключение и dbms_profiler.flush_data; не отрабатывает? Тогда

BEGIN
dbms_profiler.start_profiler;

BEGIN

  M_PKG.Set_Setting(p1 => 666, p2 => 'K');

WHEN OTHERS THEN
  NULL;
END;

dbms_profiler.flush_data;
dbms_profiler.stop_profiler;
END;

вам должно помочь.
gri4
Дата: 02.03.2007 17:05:28
Да, именно так. В процедуре EXCEPTION блок логирует ошибку и делает RAISE_APPLICATION_ERROR.

Попробовал так

BEGIN
dbms_profiler.start_profiler;

BEGIN

M_PKG.Set_Setting(p1 => 666, p2 => 'K');

EXCEPTION
WHEN OTHERS THEN
NULL;
END;

dbms_profiler.flush_data;
dbms_profiler.stop_profiler;
END;

не едет. ORA-06528: Error executing PL/SQL profiler
Nike_K
Дата: 02.03.2007 17:18:39
Я на 90% уверен, что в твоей схеме отсутствуют таблицы профайлера. Прогони

<oracle_home>\ora92\rdbms\admin\proftab.sql под тем же пользователем, под которым запускаешь профайлер.
gri4
Дата: 02.03.2007 17:28:44
Таблицы есть. Если запустить M_PKG.Set_Setting с параметрами, которые не вызвают RAISE_APPLICATION_ERROR, эти таблицы заполняются.
Nike_K
Дата: 02.03.2007 17:59:04
Прогони

BEGIN

dbms_profiler.start_profiler;

BEGIN

NULL;

EXCEPTION
WHEN OTHERS THEN
NULL;
END;

dbms_profiler.flush_data;
dbms_profiler.stop_profiler;

END;

и

BEGIN

dbms_profiler.start_profiler;

BEGIN

RAISE_APPLICATION_ERROR(-20000, '');

EXCEPTION
WHEN OTHERS THEN
NULL;
END;

dbms_profiler.flush_data;
dbms_profiler.stop_profiler;

END;

Что говорит в первом и во втором случае?
gri4
Дата: 02.03.2007 18:43:27
Оппа. Че та я накасячил. То-ли транзакция не закрыта была, толи еще что. Вобщем, то что было предложено во втором посте, помогло. Спасибо.