Файл: 1 Детально изучить и описать предметную область.docx

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 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