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

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

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

---
http://www.rusug.ru] Портал русскоязычной группы пользователей Sybase
...
Рейтинг: 0 / 0
exception в ASA9
    #34426066
Фотография A.K.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЗагороднюкМожно ли в процедуре 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
3 сообщений из 3, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / exception в ASA9
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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