COUNTRY BUS COMPANY
A Country Bus Company owns a number of buses. Each bus is allocated to a particular route, although some routes may have several buses. Each route passes through a number of towns. One driver is allocated to each route, which corresponds to a journey through some or all of the towns on a route. Some of the towns have a garage where busses are kept and each of the buses is identified by the registration number and can carry different numbers of passengers, since the vehicles vary in size and can be single or double decked. Each route is identified by a route number and information is available on the average number of passengers carried per day for each route. Drivers have an employee number, name, address, and sometimes a telephone number. This database also serves for customer route enquiries.
ER DIAGRAM
1
TRANSFORMING ENTITY RELATIONSHIP DIAGRAM TO TABLES
POSTGRESQL
DDL COMMANDS
CREATE TABLE TOWN(TNO VARCHAR(10)PRIMARY KEY,NAME VARCHAR(30));
CREATE TABLE ROUTE(RNO VARCHAR(10)PRIMARY KEY,SOURCE VARCHAR(30),DEST VARCHAR(30),DESCRIPTION VARCHAR(50),AVG_PASS REAL);
CREATE TABLE GARAGE(GNO VARCHAR(10) PRIMARY KEY,NAME VARCHAR(30),ADDR VARCHAR(50),TNO VARCHAR(10) REFERENCES TOWN(TNO));
CREATE TABLE BUS(REGNO VARCHAR(10) PRIMARY KEY,MAKE VARCHAR(30),
2
DECK CHAR(1) CHECK(DECK IN('S','D','T')),NO_OF_PASS INT,GNO VARCHAR(10) REFERENCES GARAGE(GNO),RNO VARCHAR(10) REFERENCES ROUTE(RNO));
CREATE TABLE SERVICES(RNO VARCHAR(10) REFERENCES ROUTE(RNO),TNO VARCHAR(10) REFERENCES TOWN(TNO),SEQ INT,PRIMARY KEY(RNO,TNO));
CREATE TABLE DRIVER(ENO VARCHAR(10) PRIMARY KEY,NAME VARCHAR(30),ADDR VARCHAR(50),PHONE NUMERIC(10),RNO VARCHAR(10) REFERENCES ROUTE(RNO));
FUNCTIONS
WRITE A FUNCTION TO DISPLAY THE ROUTE FOR A GIVEN BUS NUMBER
CREATE OR REPLACE FUNCTION GET_ROUTE (TEXT) RETURNS VOID AS$$DECLAREPTR CURSOR FOR SELECT TNO FROM SERVICES WHERE RNO=$1 ORDER BY SEQ;T SERVICES.TNO%TYPE;TMP TOWN.NAME%TYPE;DATA TEXT;C INT:=0;BEGIN
OPEN PTR;FETCH FIRST FROM PTR INTO T;IF T IS NOT NULL THEN
SELECT INTO TMP NAME FROM TOWN WHERE TNO=T;DATA:=TMP;FETCH LAST FROM PTR INTO T;SELECT INTO TMP NAME FROM TOWN WHERE TNO=T;RAISE NOTICE 'ROUTE % FROM % TO %',$1,DATA,TMP;CLOSE PTR;OPEN PTR;
ELSERAISE EXCEPTION 'ROUTE % DOESNT EXIST',$1;RETURN;
END IF;LOOP
FETCH PTR INTO T;EXIT WHEN T IS NULL;SELECT INTO TMP NAME FROM TOWN WHERE TNO=T;
3
C:=C+1;RAISE NOTICE '%) % ',C, TMP;
END LOOP; END;$$LANGUAGE PLPGSQL;
OUTPUT:
bus=> SELECT GET_ROUTE('M21G');NOTICE: ROUTE M21G FROM BROADWAY TO GUINDY TVK ESTATENOTICE: 1) BROADWAYNOTICE: 2) SECRETARIATNOTICE: 3) CHEPAUKNOTICE: 4) QMCNOTICE: 5) CONVENTNOTICE: 6) MANDAVELINOTICE: 7) ADYAR GATENOTICE: 8) KOTTURPURAMNOTICE: 9) ENGINEERING COLLEGENOTICE: 10) GUINDY TVK ESTATE get_route-----------
(1 row)
WRITE A FUNCTION TO DISPLAY THE GARAGE NAME AND THE NUMBER OF BUSES IN EACH GARAGE
CREATE OR REPLACE FUNCTION GAR_DETAILS() RETURNS VOID AS$$DECLARE
PTR CURSOR FOR SELECT NAME,COUNT(BUS.GNO) FROM GARAGE,BUS WHERE GARAGE.GNO=BUS.GNO GROUP BY GARAGE.NAME;NAME GARAGE.NAME%TYPE;CNT INT;C INT:=0;
BEGINOPEN PTR;RAISE NOTICE 'SNO GARAGE NO_OF_BUSES';LOOP
FETCH PTR INTO NAME,CNT;EXIT WHEN NAME IS NULL;C:=C+1;RAISE NOTICE ' %) % %',C,NAME,CNT;
4
END LOOP;END;$$LANGUAGE PLPGSQL;
OUTPUT:
bus=> SELECT GAR_DETAILS();NOTICE: SNO GARAGE NO_OF_BUSESNOTICE: 1) BROADWAY 2NOTICE: 2) ADYAR 3NOTICE: 3) TAMBARAM 1NOTICE: 4) ICF 2NOTICE: 5) GUINDY 2 gar_details-------------
(1 row)
WRITE A FUNCTION TO DISPLAY THE BUSES FROM A GIVEN SOURCE TO DESTINATION
CREATE OR REPLACE FUNCTION GET_BUSES(TEXT,TEXT) RETURNS VOID AS$$DECLARE
T1 TOWN.TNO%TYPE;T2 TOWN.TNO%TYPE;PTR REFCURSOR; R SERVICES.RNO%TYPE;DATA ROUTE%ROWTYPE;C INT:=0;
BEGINSELECT TNO INTO T1 FROM TOWN WHERE NAME=$1;SELECT TNO INTO T2 FROM TOWN WHERE NAME=$2;OPEN PTR FOR SELECT RNO FROM SERVICES WHERE TNO=T1 INTERSECT SELECT RNO FROM SERVICES WHERE TNO=T2;RAISE NOTICE 'SNO BUS_NO SOURCE DESTINATION';LOOP
FETCH PTR INTO R;EXIT WHEN R IS NULL;SELECT * INTO DATA FROM ROUTE WHERE RNO=R;C:=C+1;RAISE NOTICE '%) % % %',C,R,DATA.SOURCE,DATA.DEST;
END LOOP;RAISE NOTICE 'TOTAL RESULTS: %',C;
5
END;$$LANGUAGE PLPGSQL;
OUTPUT:
bus=> SELECT GET_BUSES('ADYAR','BROADWAY');NOTICE: SNO BUS_NO SOURCE DESTINATIONNOTICE: 1) PP21 BROADWAY GUDUVANCHERINOTICE: 2) 21E BROADWAY NANDAMBAKKAMNOTICE: TOTAL RESULTS: 2 get_buses-----------
(1 row)
TRIGGERS
WRITE A TRIGGER TO CHECK WHETHER THE NO_OF_PASS FOR THE SPECIFIC DECK IS WITHIN RANGEDECK NO_OF_PASSS 1 TO 60D 1 TO 120T 1 TO 90
CREATE OR REPLACE FUNCTION CHECK_NO_OF_PASS() RETURNS TRIGGER AS$$BEGIN
IF NEW.DECK='S' AND NEW.NO_OF_PASS < 0 OR NEW.NO_OF_PASS > 60 THEN
RAISE EXCEPTION 'ALLOWED NO_OF_PASS FOR % IS 1 TO 60',NEW.DECK;
END IF; IF NEW.DECK='D' AND NEW.NO_OF_PASS < 0 OR NEW.NO_OF_PASS > 120 THEN
RAISE EXCEPTION 'ALLOWED NO_OF_PASS FOR % IS 1 TO 120',NEW.DECK;
END IF; IF NEW.DECK='S' AND NEW.NO_OF_PASS < 0 OR NEW.NO_OF_PASS > 90 THEN
RAISE EXCEPTION 'ALLOWED NO_OF_PASS FOR % IS 1 TO 90',NEW.DECK;
END IF; RETURN NEW;
END;
6
$$LANGUAGE PLPGSQL;
CREATE FUNCTION
CREATE TRIGGER CHECK_NO_OF_PASS BEFORE INSERT OR UPDATE ON BUSFOR EACH ROW EXECUTE PROCEDURE CHECK_NO_OF_PASS();
CREATE TRIGGER
OUTPUT:
INSERT INTO BUS VALUES('TN39A0030','ASHOK LEYLAND','S',63,'G001','47A');
ERROR: ALLOWED NO_OF_PASS FOR S IS 1 TO 60
WRITE A TRIGGER TO CHECK WHETHER THE SOURCE AND DESTINATION OF THE ROUTE ARE AVAILABLE IN TOWN NAME.
CREATE OR REPLACE FUNCTION CHECK_TOWN() RETURNS TRIGGER AS$$DECLARESRC TOWN.TNO%TYPE;DST TOWN.TNO%TYPE;BEGIN
SELECT TNO INTO SRC FROM TOWN WHERE NAME=NEW.SOURCE;SELECT TNO INTO DST FROM TOWN WHERE NAME=NEW.DEST;IF SRC IS NULL OR DST IS NULL THEN
RAISE EXCEPTION 'SOURCE AND|OR DESTINATION NOT VALID TOWNS';
END IF;RETURN NEW;
END;$$LANGUAGE PLPGSQL;
CREATE TRIGGER CHECK_TOWN BEFORE INSERT OR UPDATE ON ROUTEFOR EACH ROW EXECUTE PROCEDURE CHECK_TOWN();
OUTPUT:
bus=> INSERT INTO ROUTE VALUES('7F','ANNA NAGAR','BROADWAY','ANNA NAGAR TO BROADWAY THROUGH PURASAIVAKAM',3000);
ERROR: SOURCE AND|OR DESTINATION NOT VALID TOWNS
7
MYSQL
DDL COMMANDS
CREATE TABLE TOWN(TNO VARCHAR(10)PRIMARY KEY,NAME VARCHAR(30));
CREATE TABLE ROUTE(RNO VARCHAR(10)PRIMARY KEY,SOURCE VARCHAR(30),DEST VARCHAR(30),DESCRIPTION VARCHAR(50),AVG_PASS FLOAT);
CREATE TABLE GARAGE(GNO VARCHAR(10) PRIMARY KEY,NAME VARCHAR(30),ADDR VARCHAR(50),TNO VARCHAR(10) REFERENCES TOWN(TNO));
CREATE TABLE BUS(REGNO VARCHAR(10) PRIMARY KEY,MAKE VARCHAR(30),DECK CHAR(1) CHECK(DECK IN('S','D','T')),NO_OF_PASS INT,GNO VARCHAR(10)REFERENCES GARAGE(GNO),RNO VARCHAR(10) REFERENCES ROUTE(RNO));
CREATE TABLE SERVICES(RNO VARCHAR(10) REFERENCES ROUTE(RNO),TNO VARCHAR(10) REFERENCES TOWN(TNO),SEQ INT,PRIMARY KEY(RNO,TNO));
CREATE TABLE DRIVER(ENO VARCHAR(10) PRIMARY KEY,NAME VARCHAR(30),ADDR VARCHAR(50),PHONE BIGINT(10),RNO VARCHAR(10) REFERENCES ROUTE(RNO));
FUNCTIONS
WRITE A FUNCTION TO DISPLAY THE ROUTE FOR A GIVEN BUS NUMBER
CREATE PROCEDURE GET_ROUTE(RTE TEXT)BEGIN
DECLARE STATE INT DEFAULT 1;DECLARE TN TEXT;DECLARE TWN TEXT;DECLARE CNT INT DEFAULT 0;DECLARE PTR CURSOR FOR SELECT TNO FROM SERVICES WHERE RNO=RTE ORDER BY SEQ;DECLARE CONTINUE HANDLER FOR NOT FOUND SET STATE=0;OPEN PTR;TRUNCATE TABLE STR;FETCH PTR INTO TN;
8
IF STATE=0 THENINSERT INTO STR VALUES("INVALID BUS NUMBER");
END IF;WHILE STATE<>0 DO
SET CNT=CNT+1;SET TWN=(SELECT NAME FROM TOWN WHERE TNO=TN);INSERT INTO STR VALUES(CONCAT(CAST(CNT AS CHAR),RPAD(')',3,' ') ,TWN));FETCH PTR INTO TN;
END WHILE;SELECT * FROM STR;
END//
OUTPUT:
mysql> CALL GET_ROUTE('PP21');+---------------------------------+| RESULTS |+---------------------------------+| 1) BROADWAY || 2) SECRETARIAT || 3) CHEPAUK || 4) QMC || 5) FORE SHORE ESTATE || 6) AMS HOSPITAL || 7) ADYAR || 8) ENGINEERING COLLEGE || 9) GUINDY || 10) ST THOMAS MOUNT PO || 11) MEENAMBAKKAM/CARGO AIRPORT || 12) TIRUSULAM/AIRPORT || 13) PALLAVARAM || 14) CHROMEPET || 15) TAMBARAM SANATORIUM || 16) TAMBARAM || 17) IRUMBULIYUR || 18) PERUNGULATHUR || 19) VANDALUR || 20) VANDALUR ZOO || 21) URAPAKKAM SCHOOL || 22) PALAKKA COMPANY || 23) GUDUVANCHERI |+---------------------------------+23 rows in set (0.20 sec)
Query OK, 0 rows affected (0.25 sec)
9
WRITE A FUNCTION TO DISPLAY THE GARAGE NAME AND THE NUMBER OF BUSES IN EACH GARAGE
CREATE PROCEDURE GAR_DETAILS()BEGIN
DECLARE STATE INT DEFAULT 1;DECLARE NME TEXT;DECLARE CNT,C INT DEFAULT 0;DECLARE PTR CURSOR FOR SELECT NAME,COUNT(BUS.GNO) FROM GARAGE,BUS WHERE GARAGE.GNO=BUS.GNO GROUP BY GARAGE.NAME;DECLARE CONTINUE HANDLER FOR NOT FOUND SET STATE=0;OPEN PTR;TRUNCATE TABLE STR;FETCH PTR INTO NME,CNT;IF STATE=0 THEN
INSERT INTO STR VALUES("NO DATA");END IF;WHILE STATE<>0 DO
SET C=C+1;INSERT INTO STR VALUES(CONCAT(CAST(C AS CHAR),')',RPAD(NME,10,' ')," ",CAST(CNT AS CHAR)));FETCH PTR INTO NME,CNT;
END WHILE;SELECT * FROM STR;
END//
OUTPUT:
mysql> CALL GAR_DETAILS();+--------------------+| RESULTS |+--------------------+| 1) ADYAR 3 || 2) BROADWAY 2 || 3) GUINDY 2 || 4) ICF 2 || 5) TAMBARAM 1 |+--------------------+5 rows in set (0.04 sec)
Query OK, 0 rows affected (0.05 sec)
10
WRITE A FUNCTION TO DISPLAY THE BUSES FROM A GIVEN SOURCE TO DESTINATION
CREATE PROCEDURE GET_BUSES(SRC TEXT,DST TEXT)BEGIN
DECLARE T1 TEXT DEFAULT (SELECT TNO FROM TOWN WHERE NAME=SRC);DECLARE T2 TEXT DEFAULT (SELECT TNO FROM TOWN WHERE NAME=DST);DECLARE S,D,R TEXT;DECLARE STATE INT DEFAULT 1;DECLARE C INT DEFAULT 0;DECLARE PTR CURSOR FOR SELECT RNO FROM SERVICES WHERE TNO=T1 AND RNO IN(SELECT RNO FROM SERVICES WHERE TNO=T2);DECLARE CONTINUE HANDLER FOR NOT FOUND SET STATE=0;OPEN PTR;TRUNCATE TABLE STR;FETCH PTR INTO R;IF STATE=0 THEN
INSERT INTO STR VALUES(CONCAT("NO BUSES FROM ",SRC," TO ",DST));
END IF;WHILE STATE<>0 DO
SET C=C+1;SET S=(SELECT SOURCE FROM ROUTE WHERE RNO=R);SET D=(SELECT DEST FROM ROUTE WHERE RNO=R);INSERT INTO STR VALUES(CONCAT(CAST(C AS CHAR),') ',RPAD(R,5,' '),RPAD(S,20,' '),RPAD(R,20,' ')));FETCH PTR INTO R;
END WHILE;SELECT * FROM STR;
END//
OUTPUT:
mysql> CALL GET_BUSES('ADYAR','BROADWAY'); -> //+--------------------------------------------------+| RESULTS |+--------------------------------------------------+| 1) 21E BROADWAY NANDAMBAKKAM || 2) PP21 BROADWAY GUDUVANCHERI |+--------------------------------------------------+2 rows in set (0.01 sec)
11
Query OK, 0 rows affected (0.03 sec)
TRIGGERS
CREATE TABLE ERROR(ERR_MESSAGE VARCHAR(50)PRIMARY KEY);
CREATE PROCEDURE ERROR(ERR TEXT)BEGININSERT INTO ERROR VALUES(ERR);INSERT INTO ERROR VALUES(ERR);END//
WRITE A TRIGGER TO CHECK WHETHER THE NO_OF_PASS FOR THE SPECIFIC DECK IS WITHIN RANGEDECK NO_OF_PASSS 1 TO 60D 1 TO 120T 1 TO 90
CREATE TRIGGER CHECK_NO_OF_PASS BEFORE INSERT ON BUSFOR EACH ROWBEGIN
IF NEW.DECK='S' AND NEW.NO_OF_PASS < 0 OR NEW.NO_OF_PASS > 60 THEN
CALL ERROR('ALLOWED NO_OF_PASS FOR SINGLE DECK IS 1 TO 60');
END IF; IF NEW.DECK='D' AND NEW.NO_OF_PASS < 0 OR NEW.NO_OF_PASS > 120 THEN
CALL ERROR('ALLOWED NO_OF_PASS FOR SINGLE DECK IS 1 TO 120');
END IF; IF NEW.DECK='S' AND NEW.NO_OF_PASS < 0 OR NEW.NO_OF_PASS > 90 THEN
CALL ERROR('ALLOWED NO_OF_PASS FOR SINGLE DECK IS 1 TO 90');
END IF; END//
OUTPUT:
mysql> INSERT INTO BUS VALUES('TN39A1029','TATA','S',63,'G001','14');ERROR 1062 (23000): Duplicate entry 'ALLOWED NO_OF_PASS FOR SINGLE DECK IS 1 TO 60' for key 'PRIMARY'
12
WRITE A TRIGGER TO CHECK WHETHER THE SOURCE AND DESTINATION OF THE ROUTE ARE AVAILABLE IN TOWN NAME.
CREATE TRIGGER CHECK_TOWN BEFORE INSERT ON ROUTEFOR EACH ROWBEGIN
DECLARE SRC,DST TEXT;SELECT TNO INTO SRC FROM TOWN WHERE NAME=NEW.SOURCE;SELECT TNO INTO DST FROM TOWN WHERE NAME=NEW.DEST;IF SRC IS NULL OR DST IS NULL THEN
CALL ERROR('SOURCE AND|OR DESTINATION NOT VALID TOWNS');
END IF;END//
OUTPUT:
mysql> INSERT INTO ROUTE VALUES('7F','ANNA NAGAR','BROADWAY','ANNA NAGAR TO BROADWAY VIA PURASAIVAKAM',3000);ERROR 1062 (23000): Duplicate entry 'SOURCE AND|OR DESTINATION NOT VALID TOWNS' for key 'PRIMARY'
INGRESDDL COMMANDS
CREATE TABLE TOWN(TNO VARCHAR(10)PRIMARY KEY,NAME VARCHAR(30));
CREATE TABLE ROUTE(RNO VARCHAR(10)PRIMARY KEY,SOURCE VARCHAR(30),DEST VARCHAR(30),DESCRIPTION VARCHAR(50),AVG_PASS FLOAT);
CREATE TABLE GARAGE(GNO VARCHAR(10) PRIMARY KEY,NAME VARCHAR(30),ADDR VARCHAR(50),TNO VARCHAR(10) REFERENCES TOWN(TNO));
CREATE TABLE BUS(REGNO VARCHAR(10) PRIMARY KEY,MAKE VARCHAR(30),DECK CHAR(1) CHECK(DECK IN('S','D','T')),NO_OF_PASS INTEGER,GNO VARCHAR(10)REFERENCES GARAGE(GNO),RNO VARCHAR(10) REFERENCES ROUTE(RNO));
CREATE TABLE SERVICES(RNO VARCHAR(10) NOT NULL REFERENCES ROUTE(RNO),TNO VARCHAR(10) NOT NULL REFERENCES TOWN(TNO),SEQ INTEGER,PRIMARY KEY(RNO,TNO));
13
CREATE TABLE DRIVER(ENO VARCHAR(10) PRIMARY KEY,NAME VARCHAR(30),ADDR VARCHAR(50),PHONE BIGINT,RNO VARCHAR(10) REFERENCES ROUTE(RNO));
FUNCTIONS
WRITE A FUNCTION TO DISPLAY THE ROUTE FOR A GIVEN BUS NUMBER
CREATE PROCEDURE GET_ROUTE(RTE TEXT(10)) RESULT ROW(INTEGER,TEXT(30)) ASDECLAREFLAG INTEGER;N,T TEXT(30);S INTEGER;BEGINFLAG=0;FOR SELECT TNO,SEQ INTO :T,:S FROM SERVICES WHERE RNO=:RTE ORDER BY SEQDOFLAG=1;SELECT NAME INTO :N FROM TOWN WHERE TNO=:T;RETURN ROW(:S,:N);ENDFOR;IF FLAG=0 THENRETURN ROW(-1,'ROUTE NUMBER IS NOT VALID');ENDIF;END;
OUTPUT:
1> SELECT * FROM GET_ROUTE('PP21') +-------------+------------------------------+|result_column|result_column1 |+-------------+------------------------------+| 1|BROADWAY || 2|SECRETARIAT || 3|CHEPAUK || 4|QMC || 5|FORE SHORE ESTATE || 6|AMS HOSPITAL || 7|ADYAR || 8|ENGINEERING COLLEGE |
14
| 9|GUINDY || 10|ST THOMAS MOUNT PO || 11|MEENAMBAKKAM/CARGO AIRPORT || 12|TIRUSULAM/AIRPORT || 13|PALLAVARAM || 14|CHROMEPET || 15|TAMBARAM SANATORIUM || 16|TAMBARAM || 17|IRUMBULIYUR || 18|PERUNGULATHUR || 19|VANDALUR || 20|VANDALUR ZOO || 21|URAPAKKAM SCHOOL || 22|PALAKKA COMPANY || 23|GUDUVANCHERI |+-------------+------------------------------+(23 rows)End of Request
WRITE A FUNCTION TO DISPLAY THE GARAGE NAME AND THE NUMBER OF BUSES IN EACH GARAGE
CREATE PROCEDURE GAR_DETAILS RESULT ROW(TEXT(30),INTEGER)ASDECLAREN TEXT(30);C INTEGER;BEGINFOR SELECT NAME,COUNT(BUS.GNO) INTO :N,:C FROM GARAGE,BUS WHERE GARAGE.GNO=BUS.GNO GROUP BY GARAGE.NAMEDORETURN ROW(:N,:C);ENDFOR;END;
OUTPUT:
1> SELECT * FROM GAR_DETAILS() +------------------------------+-------------+|result_column0 |result_column|+------------------------------+-------------+|TAMBARAM | 1||GUINDY | 2||BROADWAY | 2||ADYAR | 3||ICF | 2|
15
+------------------------------+-------------+(5 rows)End of Request
WRITE A FUNCTION TO DISPLAY THE BUSES FROM A GIVEN SOURCE TO DESTINATION
CREATE PROCEDURE GET_BUSES(SRC TEXT(30),DST TEXT(30)) RESULT ROW(INTEGER,TEXT(50)) ASDECLARET1,T2 TEXT(10);R,S,D TEXT(30);FLAG INTEGER;BEGINFLAG=0;SELECT TNO INTO :T1 FROM TOWN WHERE NAME=:SRC;SELECT TNO INTO :T2 FROM TOWN WHERE NAME=:DST;FOR SELECT RNO INTO :R FROM SERVICES WHERE TNO=:T1 AND RNO IN(SELECT RNO FROM SERVICES WHERE TNO=:T2)DOFLAG=FLAG+1;SELECT SOURCE,DEST INTO :S,:D FROM ROUTE WHERE RNO=:R;RETURN ROW(FLAG,:R+' FROM '+:S+' TO '+:D);ENDFOR;IF FLAG=0 THENRETURN ROW(-1, 'NO BUSES FROM GIVEN SOURCE OR DESTINATION');ENDIF;END;
OUTPUT:
1> SELECT * FROM GET_BUSES('ADYAR','BROADWAY') +-------------+--------------------------------------------------+|result_column|result_column1 |+-------------+--------------------------------------------------+| 1|PP21 FROM BROADWAY TO GUDUVANCHERI || 2|21E FROM BROADWAY TO NANDAMBAKKAM |+-------------+--------------------------------------------------+(2 rows)End of Request
16
TRIGGERS
WRITE A TRIGGER TO CHECK WHETHER THE NO_OF_PASS FOR THE SPECIFIC DECK IS WITHIN RANGEDECK NO_OF_PASSS 1 TO 60D 1 TO 120T 1 TO 90
CREATE PROCEDURE CHECK_NO_OF_PASS(DK TEXT(10),NO INTEGER) ASBEGINIF :DK='S' AND :NO < 0 OR :NO > 60 THENRAISE ERROR 121 'ALLOWED NO_OF_PASS FOR SINGLE DECK IS 1 TO 60';ENDIF; IF :DK='D' AND :NO < 0 OR :NO > 120 THENRAISE ERROR 122 'ALLOWED NO_OF_PASS FOR SINGLE DECK IS 1 TO 120';ENDIF; IF :DK='S' AND :NO < 0 OR :NO > 90 THENRAISE ERROR 123 'ALLOWED NO_OF_PASS FOR SINGLE DECK IS 1 TO 90';ENDIF; END;CREATE TRIGGER CHECK_PASS BEFORE INSERT INTO BUSEXECUTE PROCEDURE CHECK_NO_OF_PASS(DK=NEW.DECK,NO=NEW.NO_OF_PASS);
INSERT INTO BUS VALUES('TN39A0032','ASHOK LEYLAND','S',157,'G001','14');
OUTPUT:
1> INSERT INTO BUS VALUES('TN39A1029','TATA','S',63,'G001','14') ALLOWED NO_OF_PASS FOR SINGLE DECK IS 1 TO 60
End of Request - Terminated by Errors
WRITE A TRIGGER TO CHECK WHETHER THE SOURCE AND DESTINATION OF THE ROUTE ARE AVAILABLE IN TOWN NAME.
CREATE PROCEDURE CHECK_TOWN(SRC TEXT(30),DST TEXT(30)) ASDECLARES,D TEXT(30);BEGINSELECT TNO INTO :S FROM TOWN WHERE NAME=:SRC;SELECT TNO INTO :D FROM TOWN WHERE NAME=:DST;
17
IF S IS NULL OR D IS NULL THENRAISE ERROR 124 'SOURCE AND|OR DESTINATION NOT VALID TOWNS';ENDIF;END;
CREATE TRIGGER CHECK_TOWN BEFORE INSERT INTO ROUTEEXECUTE PROCEDURE CHECK_TOWN(SRC=NEW.SOURCE,DST=NEW.DEST);
OUTPUT:
1> INSERT INTO ROUTE VALUES('7F','ANNA NAGAR','BROADWAY','ANNA NAGAR TO BROADWAY VIA PURASAIVAKAM',3000) SOURCE AND|OR DESTINATION NOT VALID TOWNS
End of Request - Terminated by Errors
18