ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 09.11.2023
Просмотров: 60
Скачиваний: 1
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
places_sum_e 'Превышено максимально разрешенное
кол-во мест!'
create trigger places_sum_t for board_has_class
active after insert or update
as
declare variable al_plac int;
declare variable aircrft int;
declare variable plac_sum int;
begin
aircrft = (select board.airlainer_code from board where new.board_number
=
board.board_number);
al_plac = (select allowed_places from airlainer where :aircrft =
airlainer_code);
plac_sum = (select SUM(board_has_class.places_in_class)
from board_has_class where board_has_class.board_number
new.board_number);
=
if(:plac_sum > :al_plac) then exception places_sum_e;
end
Триггер, проверяющий, что билет можно оформить только на
совершеннолетнее лицо
create exception ages_e 'На это лицо нельзя оформить билет!'
create trigger ages_t for passanger
2
6
active after insert or update
as
declare variable ag date;
declare variable pass_ag date;
begin
ag = (select CURRENT_DATE from RDB$DATABASE);
pass_ag = (select DATEADD(year, 18, passanger.birthday)
from passanger where passanger.pasport = new.pasport);
if (:pass_ag > :ag) then exception ages_e;
end
Триггер, проверяющий, что нельзя оформить билет на место, которого
нет
create exception place_wrong 'Такого места нет!'
create trigger place_wrong_t for ticket
active after insert or update
as
declare variable plc_in_cl int;
declare variable brd_num int;
begin
brd_num = (select board_number from flight where new.flight_number =
flight_number);
plc_in_cl = (select board_has_class.places_in_class from board_has_class
where board_has_class.class_id = new.class_id and
board_has_class.board_number = :brd_num);
if (:plc_in_cl < new.sit_place or (new.sit_place < 0)) then exception
place_wrong;
end
2
7
Триггер, проверяющий, что нельзя оформить билет в класс, которого в
самолете нет
create exception class_wrong 'Такого класса в самолете нет!'
create trigger class_wrong_t for ticket
active after insert or update
as
declare variable brd_num int;
begin
brd_num = (select board_number from flight where new.flight_number =
flight_number);
if ((select count(*) from board_has_class
where board_has_class.board_number = :brd_num and
board_has_class.class_id = new.class_id) = 0) then exception class_wrong;
end
Триггер, проверяющий, что нельзя оформить билет на уже занятое
место
create exception place_reserved 'Место уже занято!'
create trigger place_reserved_t for ticket
active before insert or update
as
begin
if ((select count(*) from ticket
where new.class_id = ticket.class_id and
new.flight_number = ticket.flight_number
and new.sit_place = ticket.sit_place) > 0) then exception place_reserved;
end
Процедура добавления нового авиалайнера и назначения его на рейс
2
8
create procedure airlainer_create
(airl_cd int, airl_m varchar(70), airl_pl int, brd_nmb int)
as
begin
insert into airlainer
values(:airl_cd, :airl_m, :airl_pl);
insert into board
values(:brd_nmb, :airl_cd);
end
Процедура оформления билета для нового пассажира
create procedure ticket_create
(psprt varchar(10), vs varchar(15), nm varchar(80),
srnm varchar(80), ptrn varchar(80), brthd date,
tckt int, sitpl int, flght int, clss varchar(50),
prc float)
as
declare variable clssid int;
begin
insert into passanger
values(:psprt, :vs, :nm, :srnm, :ptrn, :brthd);
clssid = (select class.class_id from class where class.class_name = :clss);
insert into ticket
values(:tckt, :psprt, :sitpl, :flght, :clssid, :prc);
end
кол-во мест!'
create trigger places_sum_t for board_has_class
active after insert or update
as
declare variable al_plac int;
declare variable aircrft int;
declare variable plac_sum int;
begin
aircrft = (select board.airlainer_code from board where new.board_number
=
board.board_number);
al_plac = (select allowed_places from airlainer where :aircrft =
airlainer_code);
plac_sum = (select SUM(board_has_class.places_in_class)
from board_has_class where board_has_class.board_number
new.board_number);
=
if(:plac_sum > :al_plac) then exception places_sum_e;
end
Триггер, проверяющий, что билет можно оформить только на
совершеннолетнее лицо
create exception ages_e 'На это лицо нельзя оформить билет!'
create trigger ages_t for passanger
2
6
active after insert or update
as
declare variable ag date;
declare variable pass_ag date;
begin
ag = (select CURRENT_DATE from RDB$DATABASE);
pass_ag = (select DATEADD(year, 18, passanger.birthday)
from passanger where passanger.pasport = new.pasport);
if (:pass_ag > :ag) then exception ages_e;
end
Триггер, проверяющий, что нельзя оформить билет на место, которого
нет
create exception place_wrong 'Такого места нет!'
create trigger place_wrong_t for ticket
active after insert or update
as
declare variable plc_in_cl int;
declare variable brd_num int;
begin
brd_num = (select board_number from flight where new.flight_number =
flight_number);
plc_in_cl = (select board_has_class.places_in_class from board_has_class
where board_has_class.class_id = new.class_id and
board_has_class.board_number = :brd_num);
if (:plc_in_cl < new.sit_place or (new.sit_place < 0)) then exception
place_wrong;
end
2
7
Триггер, проверяющий, что нельзя оформить билет в класс, которого в
самолете нет
create exception class_wrong 'Такого класса в самолете нет!'
create trigger class_wrong_t for ticket
active after insert or update
as
declare variable brd_num int;
begin
brd_num = (select board_number from flight where new.flight_number =
flight_number);
if ((select count(*) from board_has_class
where board_has_class.board_number = :brd_num and
board_has_class.class_id = new.class_id) = 0) then exception class_wrong;
end
Триггер, проверяющий, что нельзя оформить билет на уже занятое
место
create exception place_reserved 'Место уже занято!'
create trigger place_reserved_t for ticket
active before insert or update
as
begin
if ((select count(*) from ticket
where new.class_id = ticket.class_id and
new.flight_number = ticket.flight_number
and new.sit_place = ticket.sit_place) > 0) then exception place_reserved;
end
Процедура добавления нового авиалайнера и назначения его на рейс
2
8
create procedure airlainer_create
(airl_cd int, airl_m varchar(70), airl_pl int, brd_nmb int)
as
begin
insert into airlainer
values(:airl_cd, :airl_m, :airl_pl);
insert into board
values(:brd_nmb, :airl_cd);
end
Процедура оформления билета для нового пассажира
create procedure ticket_create
(psprt varchar(10), vs varchar(15), nm varchar(80),
srnm varchar(80), ptrn varchar(80), brthd date,
tckt int, sitpl int, flght int, clss varchar(50),
prc float)
as
declare variable clssid int;
begin
insert into passanger
values(:psprt, :vs, :nm, :srnm, :ptrn, :brthd);
clssid = (select class.class_id from class where class.class_name = :clss);
insert into ticket
values(:tckt, :psprt, :sitpl, :flght, :clssid, :prc);
end