CftClub.ru
Клуб специалистов ЦФТ-Банк

Как узнать какая ошибка произошла в другой операции?

 
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Разработка в PL/PLUS. Оптимизация запросов Oracle
Предыдущая тема :: Следующая тема  
Автор Сообщение
arkazar
Участник со стажем


Вступление в Клуб: 27.09.2010
СообщениеПт Мар 23, 2012 15:51   Как узнать какая ошибка произошла в другой операции? Ответить с цитатой
Полезность: Нет оценки
Добрый день!

Подскажите, как можно при вызове из одной операции другую (в частности закрытие РКО) узнать какая ошибка, не дала закрыть счёт?
Мне нужен именно текст, чтобы отобразить в коммуникационный канал.
Alexsey
Эксперт


Вступление в Клуб: 06.09.2007
СообщениеПт Мар 23, 2012 16:15    Ответить с цитатой
Полезность: Нет оценки
перехватить ошибку.. и вывести SQLERRM

например:
Код:
begin
....
exception
   when OTHERS then
      if v_console then
         stdio.put_line_buf ('Ошибка обработки строки выписки № '||this.[NUM_STR]||': '||::[IMS_BO].[LIB].trim_ora(sqlerrm)||
                        ' Документы не созданы!');
      end if;
end;

_________________
всегда есть как минимум 2 выхода
arkazar
Участник со стажем


Вступление в Клуб: 27.09.2010
СообщениеПт Мар 23, 2012 16:42    Ответить с цитатой
Полезность: Нет оценки
Спасибо.
Random
Эксперт


Вступление в Клуб: 27.06.2011
СообщениеПн Мар 26, 2012 11:03    Ответить с цитатой
Полезность: 1
Alexsey пишет:
перехватить ошибку.. и вывести SQLERRM

например:
Код:
begin
....
exception
   when OTHERS then
      if v_console then
         stdio.put_line_buf ('Ошибка обработки строки выписки № '||this.[NUM_STR]||': '||::[IMS_BO].[LIB].trim_ora(sqlerrm)||
                        ' Документы не созданы!');
      end if;
end;


Не совсем согласен.
Я лично перехватываю только нужные мне исключения (ну, если они не выводятся стандартным pragma error, конечно):
Код:

pragma macro(except, '[1]   exception;
[1]_EXCEPTION    constant number :=   [2];
pragma exception_init([1],   [2])', substitute);

&except(SNAPSHOT_TOO_OLD,      -01555);
&except(PRAGMA_ERROR,         -20300);

...


exception when SNAPSHOT_TOO_OLD then
   ...
   when PRAGMA_ERROR then
   ...


Ну и вывожу не только sqlerrm:
Код:

function errmess return varchar2 is
begin
   return 'ошибка '||sqlcode||' {'||sqlerrm||'}. Стек: '||dbms_utility.FORMAT_ERROR_BACKTRACE;
end;
arkazar
Участник со стажем


Вступление в Клуб: 27.09.2010
СообщениеПн Мар 26, 2012 13:37    Ответить с цитатой
Полезность: Нет оценки
Я так понял, что sqlerrm выдаёт ошибку pragma error из операции, так?
Random
Эксперт


Вступление в Клуб: 27.06.2011
СообщениеПн Мар 26, 2012 14:05    Ответить с цитатой
Полезность: 3
arkazar пишет:
Я так понял, что sqlerrm выдаёт ошибку pragma error из операции, так?


sqlcode - выводит код исключения (ошибки). Все исключения, сделанные в ЦФТ с помощью pragma error, имеют код ORA-20300

sqlerrm - выводит текстовое сообщение, сопровождающее исключение. Для pragma error - это то, что пишут в скобочках
Код:
pragma error('Внимание! Это ошибка.');


dbms_utility.FORMAT_ERROR_BACKTRACE - возвращает стэк вызовов до места, где произошло исключение, то есть имена пакетов/функций/процедур/триггеров/анонимных блоков/и т.п. вместе с номерами строк, что является очень полезным для отладки.
arkazar
Участник со стажем


Вступление в Клуб: 27.09.2010
СообщениеСб Апр 28, 2012 11:55    Ответить с цитатой
Полезность: Нет оценки
Я реализовал это так

Код:

exception when others then

debug_pipe(sqlerrm);



Но выдаётся не такое сообщение, как в вызываемой в фоновом режиме операции.
ORA-06502: PL/SQL: numeric or value error: character to number conversion error

Т.е. не корректное для пользователя? как в операции
"Нельзя закрыть договор..."

Подскажите,где ошибся?
bizon-86
Участник


Вступление в Клуб: 16.02.2012
СообщениеВт Май 01, 2012 12:55    Ответить с цитатой
Полезность: Нет оценки
arkazar пишет:
Я реализовал это так

Код:

exception when others then

debug_pipe(sqlerrm);



Но выдаётся не такое сообщение, как в вызываемой в фоновом режиме операции.
ORA-06502: PL/SQL: numeric or value error: character to number conversion error

Т.е. не корректное для пользователя? как в операции
"Нельзя закрыть договор..."

Подскажите,где ошибся?


Налицо ошибка преобразования. Какой-то символ затисался в строку, которую вы явно или неявно преобразовываете в number. format_error_backtrace даст ответ, где именно идет преобразование.

P.s. Лучше debug_pipe(sqlerrm,0); Чтоб наверняка...
Показать сообщения:   
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Разработка в PL/PLUS. Оптимизация запросов Oracle Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Рейтинг@Mail.ru