>>>>>>>>>>>>>>>>>>>>CREATE TABLE<<<<<<<<<<<<<<<<<<<<

create table train_details(train_name char(15) primary key,total_seats number(3),reserved_seats number(3));

create table reservation_status(train_name char(15) references train_details(train_name),seat_id number(3),reserved char(2) check (reserved in('y','n')),customer_name char(15));	 

create table waiting_list(slno number(3),customer_name char(15) primary key,train_name char(15) references train_details(train_name));

 

>>>>>>>>>>>>>>>>>>>>ENTER TRAIN DETAILS<<<<<<<<<<<<<<<<<<<<


declare

	tname char(15);
	tot number(3);
	resv number(3);
	cursor cur is select * from train_details;

begin

	insert into train_details values('&train_name',&total_seats,0);

	open cur;

	loop
		fetch cur into tname,tot,resv;
		if cur%found then
			for i in 1..tot
			loop
				insert into reservation_status values(tname,i,'n',null);
			end loop;
		else
			exit;
		end if;
	end loop;

	commit;
	close cur;
end;

/

Enter value for train_name: AA

Enter value for total_seats: 3

old   7: insert into train_details values('&train_name',&total_seats,0);

new   7: insert into train_details values('AA',3,0);

PL/SQL procedure successfully completed.

SQL> /

Enter value for train_name: BB

Enter value for total_seats: 2

old   7: insert into train_details values('&train_name',&total_seats,0);

new   7: insert into train_details values('BB',2,0);

 

PL/SQL procedure successfully completed.

 

SQL> select * from train_details;

TRAIN_NAME                        TOTAL_SEATS           RESERVED_SEATS
--------------------------------------------------------------------------------------
AA                                3                     0
BB                                2                     0

 

SQL> select * from  reservation_status;

TRAIN_NAME                        SEAT_ID         RE       CUSTOMER_NAME
--------------------------------------------------------------------------------------
AA                                1               n
AA                                2               n
AA                                3               n
BB                                1               n
BB                                2               n

5 rows selected.

 

>>>>>>>>>>>>>>>>>>>>RESERVE A SEAT<<<<<<<<<<<<<<<<<<<<

declare
	cname char(15);
	tname char(15);
	tot number(3);
	resv number(3);
	sid number(3);
	sno number(3);
	sl number(3);
begin
	cname:=&cname;
	tname:=&tname;
	select total_seats into tot from train_details where train_name=tname;
	select reserved_seats into resv from train_details where train_name=tname;
	if tot>resv then
        select MIN(seat_id) into sid from reservation_status where train_name=tname and reserved='n';
        update reservation_status set reserved='y' where train_name=tname and seat_id=sid;
        update reservation_status set customer_name=cname where train_name=tname and seat_id=sid;
        update train_details set reserved_seats=reserved_seats+1 where train_name=tname;
	else
        select MAX(slno) into sno from waiting_list;
        if sno is null then
			sl:=1;
        else
			sl:=sno+1;
        end if;

        insert into waiting_list values(sl,cname,tname);
	end if;

end;

SQL> /

Enter value for cname: 'Tintumon'

old  10: cname:=&cname;

new  10: cname:='Tintumon';

Enter value for tname: 'AA'

old  11: tname:=&tname;

new  11: tname:='AA';

PL/SQL procedure successfully completed.

SQL> /

Enter value for cname: 'Kuttoos'

old  10: cname:=&cname;

new  10: cname:='Kuttoos';

Enter value for tname: 'BB'

old  11: tname:=&tname;

new  11: tname:='BB';

 

PL/SQL procedure successfully completed.

 

SQL> /

Enter value for cname: 'Appu'

old  10: cname:=&cname;

new  10: cname:='Appu';

Enter value for tname: 'BB'

old  11: tname:=&tname;

new  11: tname:='BB';

 

PL/SQL procedure successfully completed.

 

SQL> /

Enter value for cname: 'Tuttu'

old  10: cname:=&cname;

new  10: cname:='Tuttu';

Enter value for tname: 'BB'

old  11: tname:=&tname;

new  11: tname:='BB';

 

PL/SQL procedure successfully completed.

 

SQL> select * from reservation_status;

 

TRAIN_NAME                        SEAT_ID         RE         CUSTOMER_NAME
---------------------------------------------------------------------------------------
AA                                1               y          Tintumon
AA                                2               n
AA                                3               n
BB                                1               y          Kuttoos
BB                                2               y          Appu

5 rows selected.

SQL> select * from waiting_list;

SLNO         CUSTOMER_NAME               TRAIN_NAME
--------------------------------------------------------------------------------
1            Tuttu                       BB

 

>>>>>>>>>>>>>>>>>>>>CANCEL A RESERVATION<<<<<<<<<<<<<<<<<<<<

declare
	cname char(15);
	tname char(15);
	sid number(3);
	sno number(3);
	sl number(3);
begin
	cname:=&cname;
	tname:=&tname;
	select seat_id into sid from reservation_status where train_name=tname and customer_name=cname;
	select MIN(slno) into sno from waiting_list where train_name=tname;
	if sno is not null then
        select customer_name into cname from waiting_list where train_name=tname and slno=sno;
        update reservation_status set customer_name=cname where train_name=tname and seat_id=sid;
        delete from waiting_list where train_name=tname and slno=sno;
	else
        update reservation_status set reserved='n' where train_name=tname and seat_id=sid;
        update reservation_status set customer_name=null where train_name=tname and seat_id=sid;
        update train_details set reserved_seats=reserved_seats-1 where train_name=tname;
	end if;
end;

/

Enter value for cname: 'Appu'

old   8: cname:=&cname;

new   8: cname:='Appu';

Enter value for tname: 'BB'

old   9: tname:=&tname;

new   9: tname:='BB';

PL/SQL procedure successfully completed.

SQL> select * from reservation_status;


TRAIN_NAME                        SEAT_ID         RE         CUSTOMER_NAME
------------------------------------------------------------------------------------------------
AA                                1               y          Tintumon
AA                                2               n
AA                                3               n
BB                                1               y          Kuttoos
BB                                2               y          Tuttu

5 rows selected.	 

SQL> select * from waiting_list;

SLNO         CUSTOMER_NAME                           TRAIN_NAME
----------------------------------------------------------------------------------



SQL> select * from train_details;

TRAIN_NAME            TOTAL_SEATS           RESERVED_SEATS
------------------------------------------------------------------
AA                    3                     1
BB                    2                     2