Гость
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Обработка ошибки / 15 сообщений из 15, страница 1 из 1
28.02.2021, 13:28
    #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
28.02.2021, 13:44
    #40049341
AltHasp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка ошибки
pirab41,

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

exit убери, зачем он там ?
...
Рейтинг: 0 / 0
28.02.2021, 13:57
    #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
28.02.2021, 16:49
    #40049369
AltHasp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка ошибки
pirab41,

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

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

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

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

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

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

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


Я когда это увидел, "остальное" даже читать не стал. Консерватория-с.
...
Рейтинг: 0 / 0
01.03.2021, 07:33
    #40049450
m7m
m7m
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка ошибки
Да ладно вам,
будет желание,
научится.
...
Рейтинг: 0 / 0
01.03.2021, 15:17
    #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
01.03.2021, 15:20
    #40049575
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка ошибки
01.03.2021 15:17, Гаджимурадов Рустам пишет:
> Тикет на оптимизацию таких случаев в студию трекер!

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

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

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


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

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


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