powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / sqlerrm
17 сообщений из 17, страница 1 из 1
sqlerrm
    #39746777
cobalt_frog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
всем привет,
Есть функция которая всегда отрабатывает всегда с ошибкой.
Есть вторая функция, которая вызывает первую...почему то когда вывожу в лог в блоке 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
sqlerrm
    #39746788
cobalt_frog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
такое чувство что первый раз вызывается когда в первой функции указан raise_application_error(-20000,'1',true), а во второй с
raise_application_error(-20000,'1',false)
...
Рейтинг: 0 / 0
sqlerrm
    #39746832
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cobalt_frogстроки 1 и 2 возвращают разный текст.Врёшь.
...
Рейтинг: 0 / 0
sqlerrm
    #39746840
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cobalt_frog,

Тест-кейс в sqlplus сделать можешь?
...
Рейтинг: 0 / 0
sqlerrm
    #39746849
cobalt_frog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: 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
sqlerrm
    #39746850
cobalt_frog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Eliccobalt_frogстроки 1 и 2 возвращают разный текст.Врёшь.
век воли не видать..пример ниже
...
Рейтинг: 0 / 0
sqlerrm
    #39746851
cobalt_frog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
env,

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

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

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



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

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

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



.....
stax

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

стэка изначально нет.
...
Рейтинг: 0 / 0
sqlerrm
    #39747134
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
17 сообщений из 17, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / sqlerrm
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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