продажа авиабилетов. продаж авиабилетов. 1 Детально изучить и описать предметную область
Скачать 5.96 Mb.
|
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 |