powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Выдать текст исключения в обработчике исключений
10 сообщений из 10, страница 1 из 1
Выдать текст исключения в обработчике исключений
    #40010501
verter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имеется хр. процедура P_STOR_PR1, в которой встречаются различные raise_application_error(...);
Имеется другая хр. процедура P_STOR_PR2, которая вызывает P_STOR_PR1.
Во 2-й процедуре вызов 1-й обёрнут обработчиком исключений, но не для того чтобы заглушить возможные исключения в 1-й процедуре, а для того чтобы дописать свой текст в возникающее исключение в 1-й процедуре.

Код: plsql
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.
create or replace P_STOR_PR1 is
begin
    begin
    ....
    exception
       when others then
         raise_application_error('Ошибка 1');
   end;
   begin
    ....
    exception
       when others then
         raise_application_error('Ошибка 2');
   end;
   ...........
end;

create or replace P_STOR_PR2 is
begin
    begin
        P_STOR_PR1;
    exception
        when others then
           raise_application_error('Ошибка в P_STOR_PR1');  
    end;
end;



Во 2-й процедуре если, например, в 1-й процедуре произошло исключение "Ошибка 1", очень хочется выдать сообщение об ошибке следующего содержания:

"Ошибка в P_STOR_PR1. А именно: Ошибка 1"

Вместо "Ошибка 1" нужно подставлять текст ошибки того исключения, которое произошло в 1-й процедуре.

Вот как такое сделать?
...
Рейтинг: 0 / 0
Выдать текст исключения в обработчике исключений
    #40010503
Фотография кит северных морей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sqlerrm, sqlcode
...
Рейтинг: 0 / 0
Выдать текст исключения в обработчике исключений
    #40010505
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
verter,

SQLERRM не оно?

.....
stax
...
Рейтинг: 0 / 0
Выдать текст исключения в обработчике исключений
    #40010507
dmdmdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Обратите внимание и на третий параметр RAISE_APPLICATION_ERROR.
...
Рейтинг: 0 / 0
Выдать текст исключения в обработчике исключений
    #40010508
graycode
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
verter,

dbms_utility.format_error_backtrace
...
Рейтинг: 0 / 0
Выдать текст исключения в обработчике исключений
    #40010514
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
verter,

не закопипастелось

Код: plsql
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.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
SQL> ed
Wrote file afiedt.buf

  1  declare
  2  v_errm VARCHAR2(32000);
  3  procedure P_STOR_PR1 is
  4  begin
  5      begin
  6      raise value_error;
  7      exception
  8         when others then
  9           raise_application_error(-20001,'Ошибка 1');
 10     end;
 11     begin
 12      raise no_data_found;
 13      exception
 14         when others then
 15           raise_application_error(-20002,'Ошибка 2');
 16     end;
 17  end;
 18  procedure P_STOR_PR2 is
 19  begin
 20      begin
 21          P_STOR_PR1;
 22      exception
 23          when others then
 24             v_errm:=sqlerrm;
 25             raise_application_error(-20111,'Ошибка в P_STOR_PR1. '||v_errm);
 26      end;
 27  end;
 28  begin
 29   P_STOR_PR2;
 30* end;
SQL> /
declare
*
ERROR at line 1:
ORA-20111: Ошибка в P_STOR_PR1. ORA-20001: Ошибка 1
ORA-06512: at line 25
ORA-06512: at line 29


SQL>



....
stax
...
Рейтинг: 0 / 0
Выдать текст исключения в обработчике исключений
    #40010676
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stax,

dmdmdm же намекнул "Обратите внимание и на третий параметр RAISE_APPLICATION_ERROR". Измени:

Код: plsql
1.
raise_application_error(-20111,'Ошибка в P_STOR_PR1. '||v_errm);



на:

Код: plsql
1.
raise_application_error(-20111,'Ошибка в P_STOR_PR1.',TRUE);



и получишь больше инфы:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
ERROR at line 1:
ORA-20111: Ошибка в P_STOR_PR1.
ORA-06512: at line 25
ORA-20001: Ошибка 1
ORA-06512: at line 9
ORA-06512: at line 21
ORA-06512: at line 29


SQL>



SY.
...
Рейтинг: 0 / 0
Выдать текст исключения в обработчике исключений
    #40010714
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Учтите ещё что текст ошибки может превысить 1кб.

А $$PLSQL_UNIT содержит имя вашей процедуры.
...
Рейтинг: 0 / 0
Выдать текст исключения в обработчике исключений
    #40010723
dmdmdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL
$$PLSQL_UNIT содержит имя вашей процедуры.


Щас нам Неофит пояснит, как имя процедуры в пакете узнать.

Правда, Неофит?
...
Рейтинг: 0 / 0
Выдать текст исключения в обработчике исключений
    #40010760
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dmdmdm
НеофитSQL
$$PLSQL_UNIT содержит имя вашей процедуры.


Щас нам Неофит пояснит, как имя процедуры в пакете узнать.

Правда, Неофит?


У ТС процедуры не в пакете, там все норм.

Читайте внимательнее, чтоб такие простые ошибки не совершать.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Выдать текст исключения в обработчике исключений
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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