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

Грабли 2

 
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Справочник PL/PLUS: Функции, примеры, приёмы
Предыдущая тема :: Следующая тема  
Автор Сообщение
German
Профи


Вступление в Клуб: 25.06.2007
СообщениеПт Мар 26, 2010 13:35   Грабли 2 Ответить с цитатой
Полезность: 1
Приходилось наступать вот так:

1. Пишем

Код:
begin
   locate x in ::[AC_FIN] where x.[MAIN_V_ID] = 'XXXX';
   pragma error('Счёт нашли');
end;


Всё работает Smile

2. Вспоминаем, что забыли обработать случай, когда счета нет, добавляем exception

Код:
begin
   locate x in ::[AC_FIN] where x.[MAIN_V_ID] = 'XXXX';
   pragma error('Счёт нашли');
exception when others then
   null;
end;


Больше не работает Smile

Причина очевидна, но я, помнится, поломал голову...
_________________
Homo homini
dnk_dz
Эксперт


Вступление в Клуб: 19.09.2007
СообщениеСр Мар 31, 2010 23:06    Ответить с цитатой
Полезность: Нет оценки
Для Вас причина очевидна. Для остальных, может, нет. Может быть подробнее опишите?
German
Профи


Вступление в Клуб: 25.06.2007
СообщениеЧт Апр 01, 2010 13:04    Ответить с цитатой
Полезность: 2
Пожалуйста, опишу подробнее.

exception с условием when others перехватывает все критичные ошибки, в том числе pragma error. И вместо неё выполняет null, то есть ничего никуда не выводит.
Решение - вместо pragma error использовать любой вариант debug, debug_pipe и т.д. или описывать конкретные исключения, такие как NO_DATA_FOUND или TOO_MANY_ROWS (для конструкций с exact), а более общий вариант с others не применять.
_________________
Homo homini
ГлСП
Профи


Вступление в Клуб: 20.09.2007
СообщениеПн Апр 05, 2010 05:06    Ответить с цитатой
Полезность: Нет оценки
тут я был не прав

Последний раз редактировалось: ГлСП (Пн Апр 05, 2010 13:40), всего редактировалось 1 раз
zinovjeva_n
Участник - экстремал


Вступление в Клуб: 15.10.2008
СообщениеПн Апр 05, 2010 11:07    Ответить с цитатой
Полезность: Нет оценки
ГлСП пишет:
German пишет:
или TOO_MANY_ROWS (для конструкций с exact)



Хочу вас разочаровать, но это исключение в данном случае работать не будет. Это на тему грабелек

Чтобы оно заработал нужно сделать вот так

Код:

locate exact x in ::[AC_FIN] where x.[MAIN_V_ID] = 'XXXX';


Так человек же указал "(для конструкций с exact)".
_________________
Coding for food
Показать сообщения:   
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Справочник PL/PLUS: Функции, примеры, приёмы Часовой пояс: GMT + 3
Страница 1 из 1

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