Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Выдать текст исключения в обработчике исключений / 10 сообщений из 10, страница 1 из 1
21.10.2020, 14:26
    #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
21.10.2020, 14:36
    #40010503
кит северных морей
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выдать текст исключения в обработчике исключений
sqlerrm, sqlcode
...
Рейтинг: 0 / 0
21.10.2020, 14:37
    #40010505
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выдать текст исключения в обработчике исключений
verter,

SQLERRM не оно?

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

dbms_utility.format_error_backtrace
...
Рейтинг: 0 / 0
21.10.2020, 14:58
    #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
21.10.2020, 19:43
    #40010676
SY
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
21.10.2020, 23:13
    #40010714
НеофитSQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выдать текст исключения в обработчике исключений
Учтите ещё что текст ошибки может превысить 1кб.

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


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

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


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

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


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

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


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