SQL- RAILWAY RESERVATION SYSTEM

>>>>>>>>>>>>>>>>>>>>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