powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Обработка 2-х и более исключений в одном блоке
17 сообщений из 17, страница 1 из 1
Обработка 2-х и более исключений в одном блоке
    #38810745
aidynchik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем доброго дня!
Пишу процедуру в Firebird 2.5, где в одном блоке получается два WHEN.
Код: 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.
BEGIN
        -- ЕСТЬ ЛИ ТОВАР С ПОДОБНЫМ АРТИКУЛОМ И НОМЕНКЛАТУРНЫМ НОМЕРОМ
        SELECT COUNT(*)
          FROM G_PRODUCT G
         WHERE UPPER(G.ARTICUL) = UPPER(TRIM(:ARTICUL_))
          INTO :CNT_;

        IF (CNT_ > 0) THEN BEGIN
          ERR_MSG  = 'Товар с артикулом '||ARTICUL_||' уже есть в базе';
          EXCEPTION MY_EXCEPTION;
        END
        .
        .
        .
        .

        WHEN EXCEPTION MY_EXCEPTION DO BEGIN
            log_ = log_||'Товар '||NAME_||'. Ошибка: '||ERR_MSG||'. '||CRLF;
            pr_err = 1;
        END ANY DO BEGIN
            log_ = log_||'Товар '||NAME_||'. Ошибка: '||SUBSTRING(SQLCODE FROM 1 FOR 100)||'. Код ошибки '||SQLCODE||' '||CRLF;
            pr_err = 1;
        END
    END



почему-то на выходе получается записи из обоих ексепшнов, и MY_EXCEPTION и ANY последовательно. Я что-то не так делаю? Разве он не должен был обработать только мой Ексепшн? А пошагово IbExpert вообще гонит - выскакивает окно My_Exception и на этом тестирование заканчивается.
...
Рейтинг: 0 / 0
Обработка 2-х и более исключений в одном блоке
    #38810757
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aidynchik,

Firebird-Language-Reference-Russian.pdfОператор WHEN … DO используется для обработки ошибочных ситуаций и пользовательских исключений. Оператор перехватывает все ошибки и пользовательские исключения, перечисленные после ключевого слова WHEN. Если после ключевого слова WHEN указано ключевое слово ANY, то оператор перехватывает любые ошибки и пользовательские исключения, даже если они уже были обработаны в вышестоящем WHEN блоке.

Firebird-Language-Reference-Russian.pdf
...
Рейтинг: 0 / 0
Обработка 2-х и более исключений в одном блоке
    #38810769
aidynchik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис,

спасибо! Коротко и по делу...
Почему-то у Борри написано, что ANY - означает перехват исключение, которое НЕ БЫЛО обработано.
...
Рейтинг: 0 / 0
Обработка 2-х и более исключений в одном блоке
    #38810778
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aidynchik,

в этой документации учтены найденные особенности и/или баги, в том числе и те что обнаружились на sql.ru Попробуй из 1 блока EXIT или SUSPEND сделать.
...
Рейтинг: 0 / 0
Обработка 2-х и более исключений в одном блоке
    #38810810
aidynchik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис,

я не могу EXIT сделать, этот блок в цикле, мне надо в конце вытащить один лог по всем записям.
Выкинуть ANY вообще что ли?
...
Рейтинг: 0 / 0
Обработка 2-х и более исключений в одном блоке
    #38810813
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aidynchik,

введи дополнительную переменную-флаг. Который будешь устанавливать в первом обработанном блоке, а в ANY проверять его. Только не забывай в начале иттерации цикла сбрасывать его
...
Рейтинг: 0 / 0
Обработка 2-х и более исключений в одном блоке
    #38810835
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денисв этой документации учтены найденные особенности и/или баги, в том
числе и те что обнаружились на sql.ru
В этом случае там должно быть указано, что не надо ставить WHEN ANY в ряд с любым другим
обработчиком. Оно не только работает неожиданно (CORE-3275), оно ещё и данные потерять
может (CORE-4424).
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Обработка 2-х и более исключений в одном блоке
    #38810904
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DS> В этом случае там должно быть указано, что не надо
DS> ставить WHEN ANY в ряд с любым другим обработчиком

Да нет, можно ставить, просто код сложный получится
и, для не знающих особенностей и багов, - неожиданный.

DS> Оно не только работает неожиданно (CORE-3275),
DS> оно ещё и данные потерять может (CORE-4424).

Там ещё с саспендами проблема была, точно.
В трекере я соотв. тикет не нашёл, правда.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Обработка 2-х и более исключений в одном блоке
    #38810938
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов РустамТам ещё с саспендами проблема была, точно.
В трекере я соотв. тикет не нашёл, правда.
Потому что это не проблема, а "by design".
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Обработка 2-х и более исключений в одном блоке
    #38810964
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov> Потому что это не проблема, а "by design".

Что именно "by design" ? Саспенды в обработчиках не запрещены.
Так что ИМХО там именно баг - наверное, из-за сэйвпоинтов
или ещё из-за чего-того с этим связанного.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Обработка 2-х и более исключений в одном блоке
    #38810974
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов РустамИМХО там именно баг
А что именно ты называешь багом? Покажи тесткейс.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Обработка 2-х и более исключений в одном блоке
    #38810998
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DS> А что именно ты называешь багом? Покажи тесткейс.

У меня его записанного нет, а по памяти я щас может и не воспроизведу.
Если кратко - то при наличии одноуровневых цепочке When-ов и саспендах
в них вываливалась какая-то ошибка синхронизации или что-то вроде того.
В итоге приходилось код усложнять.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Обработка 2-х и более исключений в одном блоке
    #38811005
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам,

ты про это ?
...
Рейтинг: 0 / 0
Обработка 2-х и более исключений в одном блоке
    #38811147
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimitr> ты про это?

Да, оно, только с уточнениями в комментах,
ибо ни автономка, как ты сказал, не нужна,
ни рерэйз не нужен был - достаточно просто
саспенда в первом обработчике.

Вроде легко воспроизводимый баг, чего не
пофиксил-то, совместимость боишься сломать?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Обработка 2-х и более исключений в одном блоке
    #38811162
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам,

я с ним даже не разбирался еще, просто повесил на себя на будущее
...
Рейтинг: 0 / 0
Обработка 2-х и более исключений в одном блоке
    #38811168
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов РустамВроде легко воспроизводимый баг, чего не пофиксил-то
То, что он воспроизводится, не значит, что он легко чинится. Блоки WHEN обрабатываются с
другими флагами из-за чего SUSPEND там одноразовый.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Обработка 2-х и более исключений в одном блоке
    #38811235
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DS> То, что он воспроизводится, не значит, что он легко чинится.

Спасибо, КО.

DS> ... из-за чего

Это не фиксится?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Обработка 2-х и более исключений в одном блоке
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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