Вопрос 37. Обработка ошибок в Interbase и в приложении БД.
В InterBase для обработки ошибок используются исключения.
Исключения создаются командой CREATE EXCEPTION ‘СООБЩЕНИЕ’
Вызвать исключения можно в теле триггера или ХП EXCEPTION
При вызове исключения на экран выводится сообщение и происходит откат текущей транзакции (отмен операций вставки, удаления, обновления).
ПРИМЕР:
Рассмотрим след предметную область gruppa(kod integer, nazv char(10))
stud(kod integer, fio char(30), kod_gr)
Бизнес- правило: в группе не более 30 студентов.
I способ с помощью ХП
create exception gr «В группе больше 30 студентов»
create procedure srud_ins(pkod integer, pfio char(50), pkod_gr integer)
as
declare variable kol integer;
begin
select count(*) from stud
where kod_gr=:pkod_gr into kol;
if (kol>30) then exception gr;
Insert into stud(kod, fio, kod_gr)
values (:pkod, :pfio, :pkod_gr)
end.
II способ с помощью триггера
create exception gr «В группе больше 30 студентов»
create trigger stud_ins for stud
active before insert
as
declare variable kol integer;
begin
select count(*) from stud
where kod_gr=new.kod_gr into kol;
if (kol>30) then exception gr;
end.
Обработка ошибок в приложении осуществляется с помощью следующей конструкции языка pascal.
try except end;
ПРИМЕР
try
IBQuery1.ExecSQL;
except
ShowMessage('Ошибка!); end;
В InterBase для обработки ошибок используются исключения.
Исключения создаются командой CREATE EXCEPTION ‘СООБЩЕНИЕ’
Вызвать исключения можно в теле триггера или ХП EXCEPTION
При вызове исключения на экран выводится сообщение и происходит откат текущей транзакции (отмен операций вставки, удаления, обновления).
ПРИМЕР:
Рассмотрим след предметную область gruppa(kod integer, nazv char(10))
stud(kod integer, fio char(30), kod_gr)
Бизнес- правило: в группе не более 30 студентов.
I способ с помощью ХП
create exception gr «В группе больше 30 студентов»
create procedure srud_ins(pkod integer, pfio char(50), pkod_gr integer)
as
declare variable kol integer;
begin
select count(*) from stud
where kod_gr=:pkod_gr into kol;
if (kol>30) then exception gr;
Insert into stud(kod, fio, kod_gr)
values (:pkod, :pfio, :pkod_gr)
end.
II способ с помощью триггера
create exception gr «В группе больше 30 студентов»
create trigger stud_ins for stud
active before insert
as
declare variable kol integer;
begin
select count(*) from stud
where kod_gr=new.kod_gr into kol;
if (kol>30) then exception gr;
end.
Обработка ошибок в приложении осуществляется с помощью следующей конструкции языка pascal.
try except end;
ПРИМЕР
try
IBQuery1.ExecSQL;
except
ShowMessage('Ошибка!); end;