Oracle PL / SQL: как получить трассировку стека, имя пакета и имя процедуры

Иногда исключение возвращает что-то вроде:« ORA-06502: PL / SQL: числовая ошибка или ошибка значения: буфер символьной строки слишком мал ».

Он не очень удобен для чтения, поскольку не сообщает ни таблицу, ни столбец, ни значение, которое он пытался записать.

было бы полезно получить текущее имя процедуры в данный момент Исключение произошло или обнаружено.

Как я могу это получить?

25
задан APC 12 August 2011 в 02:50
поделиться

2 ответа

Или попробуйте DBMS_UTILITY.FORMAT_CALL_STACK

9
ответ дан 28 November 2019 в 18:19
поделиться

Я использую комбинацию DBMS_UTILITY.FORMAT_ERROR_STACK и DBMS_UTILITY.FORMAT_ERROR_BACKTRACE . (Улучшение ответа Джастина Кейва)

when others then
  Dbms_Output.put_line ( DBMS_UTILITY.FORMAT_ERROR_STACK() );
  Dbms_Output.put_line ( DBMS_UTILITY.FORMAT_ERROR_BACKTRACE() );

Это дает ошибку в первой строке и стек в следующих строках: (вывод из примера, приведенного Джастином Кейвом)

ORA-20001: Error 1
ORA-06512: at "SCOTT.X1", line 4
ORA-06512: at "SCOTT.X2", line 5
ORA-06512: at line 2
8
ответ дан 28 November 2019 в 18:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: