Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / exception в ASA9 / 3 сообщений из 3, страница 1 из 1
29.03.2007, 18:11
    #34425632
exception в ASA9
Добрый день!
Можно ли в процедуре ASA9 в случае ошибки выполнения какого-либо блока узнать какой блок отвечает за ошибку?
Пробовал использовать
exception
when others then select TRACEBACK(*) into retStr;
но что-то не получается...

С ув. Загороднюк О.
...
Рейтинг: 0 / 0
29.03.2007, 19:49
    #34425873
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
exception в ASA9
Она показывает процедуры и триггера а не блоки.
Если хочешь разобраться где именно случилось исключение - оборачивай каждый подозрительный участок в свой собственный begin..exception..end

И вообще, использовать исключения не удобно.

---
http://www.rusug.ru] Портал русскоязычной группы пользователей Sybase
...
Рейтинг: 0 / 0
29.03.2007, 22:05
    #34426066
A.K.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
exception в ASA9
ЗагороднюкМожно ли в процедуре ASA9 в случае ошибки выполнения какого-либо блока узнать какой блок отвечает за ошибку?
В хорошо структурированном на блоки программном коде обычно хватает возможности точно определить, какая ошибка имела место, а в плане локализации хватает уровня "ошибка произошла в этом блоке". Для дифференциации обработки ошибки в зависимости от ее типа удобно использовать именованные исключения, как в приведенном ниже примере классического upsert'а:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
  declare err_dup_val_on_pkey exception for sqlstate '23W01';
  begin
    insert into mytable(id,val) values(v_id, v_new_val);
  exception 
    when err_dup_val_on_pkey then
      update mytable 
        set val = v_new_val
        where id = v_id;
    when others then
      message 'SQLCODE: ', SQLCODE to client;
      resignal;
  end;
Нишей использования TRACEBACK(*) в этом случае остается диагностика необработанных исключений в вызывающей среде.

Впрочем, в ряде случаев действительно хочется получить более точную локализацию. Например, когда имеется длинный и достаточно однородный код, обработка ошибок в котором идентична, но нужно знать, до какого места выполнение дошло безошибочно. Для этого можно использовать искусственные приемы. Например, определить переменную, которой перед очередным "важным" оператором присваивать специальную метку. Значение этой переменной затем можно использовать в exception-секции блока.

White OwlИ вообще, использовать исключения не удобно.
И зачем только их во все языки понавтыкали, обходились же раньше...
Imho: слишком уж категоричное и спорное утверждение.
...
Рейтинг: 0 / 0
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / exception в ASA9 / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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