powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Обработка ошибки
15 сообщений из 15, страница 1 из 1
Обработка ошибки
    #40049340
pirab41
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.
Есть ХП для добавления в таблицу Registration новой записи.
В ХП есть обработка ошибки, что если номер клиента отсутствует в другой таблице, то запись не может быть добавлена. Появится сообщение пользователю и запись в журнал ошибок.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
CREATE OR ALTER PROCEDURE RegReg (ClientID VARCHAR(6), FIO VARCHAR(30), ClientBorn DATE, Pol VARCHAR(10), Job VARCHAR(30))
AS
BEGIN

IF (:ClientID NOT IN (SELECT AccountClient FROM Client)) THEN EXCEPTION Error_Account;

INSERT INTO Registration
VALUES (:ClientID, :FIO, :ClientBorn, :Pol, :Job);

WHEN
 EXCEPTION Error_Account DO
 BEGIN
   IN AUTONOMOUS TRANSACTION DO
   BEGIN
   INSERT INTO Errors(UserName, Date_Time, CurrentProc, Descript)
   VALUES(USER, CURRENT_TIMESTAMP, 'RegReg','Данного номера клиента не существует');
   EXIT;
   END
   EXCEPTION;
 END

END;



Но когда я вызываю данную процедуру с заведомо несуществующим в родительской таблице номером:
Код: sql
1.
EXECUTE PROCEDURE RegReg('100000', 'Иванов И.И.','24.02.1989', 'муж', 'Бизнесмен');


То ошибка не обрабатываются
Помогите пожалуйста, не пойму, что не так. Вроде все по правилам делал..
...
Рейтинг: 0 / 0
Обработка ошибки
    #40049341
AltHasp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pirab41,

1) может использовать exists()
2) для целостности использовать Foreign key
...
Рейтинг: 0 / 0
Обработка ошибки
    #40049342
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pirab41,

exit убери, зачем он там ?
...
Рейтинг: 0 / 0
Обработка ошибки
    #40049346
pirab41
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AltHasp, да не в exists дело
Условие с IF составлено верно.

Если убрать блок
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
WHEN
 EXCEPTION Error_Account DO
 BEGIN
   IN AUTONOMOUS TRANSACTION DO
   BEGIN
   INSERT INTO Errors(UserName, Date_Time, CurrentProc, Descript)
   VALUES(USER, CURRENT_TIMESTAMP, 'RegReg','Данного номера клиента не существует');
   EXIT;
   END
   EXCEPTION;
 END



То на экране появится сообщение об ошибке.
А кусок с When...Do служит для добавления в журнал ошибок. С ним обработка не работает.
Стоит добавить его в код и на экране перестает появляться сообщение об ошибке и соответственно в журнал ошибок добавления тоже не происходит
...
Рейтинг: 0 / 0
Обработка ошибки
    #40049369
AltHasp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pirab41,

авторУсловие с IF составлено верно.
Вам наверное видней, ни версию ЖП ни DDL таблицы - остается гадать...

P.S.
Предикат "IN" имеет ограничение на длину.
...
Рейтинг: 0 / 0
Обработка ошибки
    #40049379
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AltHaspПредикат "IN" имеет ограничение на длину.

не имеет. Имеет только когда используется со списком значений
...
Рейтинг: 0 / 0
Обработка ошибки
    #40049427
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IF (:ClientID NOT IN (SELECT AccountClient FROM Client)) THEN EXCEPTION Error_Account;

Ужас-ужас!
Этот кусок кода гарантированно переберет натуралом всю таблицу клиентов каждый раз, и чем больше там будет записей, тем больше оно будет тупить.

остальное просто ужас.

И да, ПК-ФК наше фсё! DDL в студию!
...
Рейтинг: 0 / 0
Обработка ошибки
    #40049431
Фотография Старый плюшевый мишка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan_Pisarevsky
IF (:ClientID NOT IN (SELECT AccountClient FROM Client)) THEN EXCEPTION Error_Account;

Ужас-ужас!
Этот кусок кода гарантированно переберет натуралом всю таблицу клиентов каждый раз, и чем больше там будет записей, тем больше оно будет тупить.


Я когда это увидел, "остальное" даже читать не стал. Консерватория-с.
...
Рейтинг: 0 / 0
Обработка ошибки
    #40049450
m7m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да ладно вам,
будет желание,
научится.
...
Рейтинг: 0 / 0
Обработка ошибки
    #40049571
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan_Pisarevsky> IF (:ClientID NOT IN (SELECT AccountClient FROM Client))
Ivan_Pisarevsky> Этот кусок кода гарантированно переберет натуралом всю
Ivan_Pisarevsky> таблицу клиентов каждый раз, и чем больше там будет
Ivan_Pisarevsky> записей, тем больше оно будет тупить.

Тикет на оптимизацию таких случаев в студию трекер!
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Обработка ошибки
    #40049575
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
01.03.2021 15:17, Гаджимурадов Рустам пишет:
> Тикет на оптимизацию таких случаев в студию трекер!

а шо, в трекер уже таки принимают заявки на правку ДНК?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Обработка ошибки
    #40049583
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам
Тикет на оптимизацию таких случаев в студию трекер!
Я такой конструкцией не пользуюсь, оптимизировать ее мне без надобности. Я лучше проголосую за триграмные индексы или нативный фаиловер кластер, чем за странную фигню. Для означенной проблемы автора есть внешние ключи. Без ДДЛ ему даже посоветовать что-то нет возможности.
...
Рейтинг: 0 / 0
Обработка ошибки
    #40049657
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МП> а шо, в трекер уже таки принимают заявки на правку ДНК?

Трекер всё стерпит. Даже заявки на внедрение новой фичи: "сарказм".
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Обработка ошибки
    #40049663
ggreggory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Гаджимурадов Рустам

Трекер всё стерпит.


IMHO, не очень хорошо, когда разработчиков мало, а трекер завален всякой ерундой. Это демотивирует.
...
Рейтинг: 0 / 0
Обработка ошибки
    #40049665
Dimbuch®
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
pirab41,

EXIT Убрать надо. Не доходит код до второго эксепшена
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Обработка ошибки
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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