Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / sqlerrm / 17 сообщений из 17, страница 1 из 1
12.12.2018, 16:13
    #39746777
cobalt_frog
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sqlerrm
всем привет,
Есть функция которая всегда отрабатывает всегда с ошибкой.
Есть вторая функция, которая вызывает первую...почему то когда вывожу в лог в блоке exception второй функции значение sqlerrm при первом вызове он выводит весь трейс? во втором вызове только сообщение из первой функции.
Код: plsql
1.
2.
3.
4.
5.
6.
7.
...
exception 
when others then
dbms_output.put_line(sqlerrm); -- 1
dbms_output.put_line(sqlerrm); -- 02
end;
.. .



строки 1 и 2 возвращают разный текст.

ЗюЫю
знаю что можно использовать format_error_backtrace и format_error_stack, но хотелось бы понять почему sqlerrm так работает)
...
Рейтинг: 0 / 0
12.12.2018, 16:21
    #39746788
cobalt_frog
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sqlerrm
такое чувство что первый раз вызывается когда в первой функции указан raise_application_error(-20000,'1',true), а во второй с
raise_application_error(-20000,'1',false)
...
Рейтинг: 0 / 0
12.12.2018, 17:16
    #39746832
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sqlerrm
cobalt_frogстроки 1 и 2 возвращают разный текст.Врёшь.
...
Рейтинг: 0 / 0
12.12.2018, 17:32
    #39746840
env
env
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sqlerrm
cobalt_frog,

Тест-кейс в sqlplus сделать можешь?
...
Рейтинг: 0 / 0
12.12.2018, 17:43
    #39746849
cobalt_frog
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sqlerrm
Код: 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.
create or replace
function test1(i in  varchar) return number
  is
    c number;
begin
  select  1
    into  c
    from dual t
   where t.dummy = i;
  return c;
exception
  when no_data_found then
    raise_application_error(-20000, 'значение не найдено');
end;

create or replace
function test2(i in  varchar) return number
  is
    c number;
begin
  select  1
    into  c
    from dual t
   where 1 = test1('0');
  return c;

exception
  when others then
    dbms_output.put_line(sqlerrm);
    dbms_output.put_line(sqlerrm);
    return 1;
end;

select test2('2') from dual;
...
Рейтинг: 0 / 0
12.12.2018, 17:45
    #39746850
cobalt_frog
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sqlerrm
Eliccobalt_frogстроки 1 и 2 возвращают разный текст.Врёшь.
век воли не видать..пример ниже
...
Рейтинг: 0 / 0
12.12.2018, 17:46
    #39746851
cobalt_frog
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sqlerrm
env,

пример выше
...
Рейтинг: 0 / 0
12.12.2018, 18:03
    #39746859
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sqlerrm
cobalt_frog,

я сначала сохранял sqlerrm, а потом использовал (правда в основном в формасах)

Код: plsql
1.
2.
     v_err:=sqlerrm;
     dbms_output.put_line(v_err);



.....
stax
...
Рейтинг: 0 / 0
12.12.2018, 18:07
    #39746866
cobalt_frog
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sqlerrm
Staxcobalt_frog,

я сначала сохранял sqlerrm, а потом использовал (правда в основном в формасах)

Код: plsql
1.
2.
     v_err:=sqlerrm;
     dbms_output.put_line(v_err);



.....
stax

проблем с решением нет, могу и сохранить...или вызывать format_error_backtrace и format_error_stack...просто хочу понять почему так происходит..в доках инфы не нашел.
...
Рейтинг: 0 / 0
12.12.2018, 18:27
    #39746884
env
env
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sqlerrm
ElicВрёшь.
11.2.0.4 - при последующих повторных вызовах sqlerrm теряется обвязка вложенных ошибок.
...
Рейтинг: 0 / 0
12.12.2018, 18:40
    #39746894
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sqlerrm
cobalt_frogпонять почему такстек ошибок сбрасывает любой sql, включая типичный для эксепшн-блока rollback. Внутри sqlerrm есть некурсивные запросы к словарю, посему оракл рекомендует использовать format_error_stack вместо sqlerrm.
...
Рейтинг: 0 / 0
12.12.2018, 18:51
    #39746900
cobalt_frog
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sqlerrm
Спасибо.
...
Рейтинг: 0 / 0
12.12.2018, 18:52
    #39746901
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sqlerrm
env11.2.0.4 - при последующих повторных вызовах sqlerrm теряется обвязка вложенных ошибок.Поведение стабильно неожиданное от 7.3 до 18.3
...
Рейтинг: 0 / 0
12.12.2018, 19:54
    #39746927
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sqlerrm
ElicнеожиданноеТам что-то завязано на sql-контекст. Если исключение произошло в sql-контексте, то в блоке исключений есть доступ к последнему контексту и в нем есть стек, пока он не будет перебит новым sql-контекстом. Если исключение произошло в plsql, то нет sql-контекста и стека тоже нет.
...
Рейтинг: 0 / 0
12.12.2018, 20:04
    #39746931
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sqlerrm
-2-Там что-то завязано на sql-контекст.Сомневаюсь. Я тестил с
Код: plsql
1.
exec dbms_output.put_line(test2('2'));
...
Рейтинг: 0 / 0
12.12.2018, 20:09
    #39746933
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sqlerrm
-2-Там что-то завязано на sql-контекст.Понял. С
Код: plsql
1.
  c := test1('0');

стэка изначально нет.
...
Рейтинг: 0 / 0
13.12.2018, 09:49
    #39747134
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sqlerrm
cobalt_frogпроблем с решением нет, могу и сохранить...или вызывать format_error_backtrace и format_error_stack...просто хочу понять почему так происходит..в доках инфы не нашел.
я нарвался на фичу в древних версиях, не знал о format_error ...
"обрезал" сообщение length(sqlerrm), аля

Код: plsql
1.
2.
3.
4.
if length(sqlerrm)>=40 
  then p1;
  else p2; 
end if; 



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


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