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
Оппа. Че та я накасячил. То-ли транзакция не закрыта была, толи еще что. Вобщем, то что было предложено во втором посте, помогло. Спасибо.