write my assignment 31240
i have created blow a database for a boat rental company, the problem is that i am having issues with my triggers , 1,2 and 3
CREATE TABLE OWNER
(
OWN_ID INT PRIMARY KEY NOT NULL,
OWN_F_NAME VARCHAR(15) NOT NULL,
OWN_L_NAME VARCHAR(15) NOT NULL,
OWN_PHONE INT NOT NULL,
OWN_CITY VARCHAR(15) NOT NULL
);
CREATE TABLE CUSTOMER
(
CUS_ID VARCHAR(5) CONSTRAINT CUS_ID_PK PRIMARY KEY,
CUS_L_NAME VARCHAR(15) NOT NULL,
CUS_F_NAME VARCHAR(15) NOT NULL,
CUS_BALANCE INT NOT NULL,
CUS_PHONE INT NOT NULL,
CUS_CITY VARCHAR(15) NOT NULL
);
CREATE TABLE CREW
(
CREW_ID VARCHAR(5) CONSTRAINT CREW_PK PRIMARY KEY,
CREW_F_NAME VARCHAR(15) NOT NULL,
CREW_L_NAME VARCHAR(15) NOT NULL,
CREW_RATE INT NOT NULL,
CREW_PHONE INT NOT NULL
);
CREATE TABLE EQUIPMENT
(
EQUIP_ID VARCHAR(5) CONSTRAINT EQUIP_PK PRIMARY KEY,
EQUIP_NAME VARCHAR(15),
EQUIP_DESC VARCHAR(50),
EQUIP_QUANTITY INT NOT NULL,
EQUIP_RATE INT NOT NULL
);
CREATE TABLE ROUTE
(
ROUTE_ID VARCHAR(5) CONSTRAINT ROUTE_PD PRIMARY KEY,
ROUTE_NAME VARCHAR(20) NOT NULL,
ROUTE_BEGIN VARCHAR(20) NOT NULL,
ROUTE_END VARCHAR(20) NOT NULL,
ROUTE_RATE INT NOT NULL
);
CREATE TABLE MAINT_FACILITY
(
FACI_ID VARCHAR(5) CONSTRAINT FACI_PK PRIMARY KEY,
FACI_NAME VARCHAR(20) NOT NULL,
FACI_LOCATION VARCHAR(20) NOT NULL,
FACI_PHONE INT NOT NULL,
FACI_RATING VARCHAR(15) CONSTRAINT FACI_RATING_5BEST CHECK(Faci_Rating In (‘1′,’2′,’3′,’4′,’5’))
);
CREATE TABLE BOAT
(
BOAT_ID varchar(5) CONSTRAINT BOAT_PK PRIMARY KEY,
OWN_ID INT CONSTRAINT BOAT_OWN_FK REFERENCES OWNER(OWN_ID),
BOAT_SIZE VARCHAR(15) CONSTRAINT SIZES CHECK (boat_size In (‘LARGE’,’MEDIUM’,’SMALL’)),
BOAT_RATE INT NOT NULL,
boat_availability varchar(3)
);
CREATE TABLE LEASE
(
LEASE_ID VARCHAR(5) CONSTRAINT LEASE_PK PRIMARY KEY,
BOAT_ID VARCHAR(5) CONSTRAINT LEASE_BOAT_FK REFERENCES BOAT(BOAT_ID),
CUS_ID VARCHAR(5) CONSTRAINT LEASE_CUSTOMER_FK REFERENCES CUSTOMER(CUS_ID),
CREW_ID VARCHAR(5) CONSTRAINT LEASE_CREW_FK REFERENCES CREW(CREW_ID),
ROUTE_ID VARCHAR(5) CONSTRAINT LEASE_ROUTE_FK REFERENCES ROUTE(ROUTE_ID),
LEASE_PRICE INT NOT NULL,
LEASE_START_DATE DATE,
LEASE_END_DATE DATE,
RETURN_DATE DATE
);
CREATE TABLE EXPERIENCE_HISTORY
(
EXPERIENCE VARCHAR(15) CONSTRAINT CUSTOMER_EXPERIENCE CHECK (experience IN (‘WORST’, ‘BAD’, ‘FAIR’, ‘GOOD’, ‘EXCELLENT’)),
CUS_ID VARCHAR(5) CONSTRAINT EXPERIENCE_CUS_FD REFERENCES CUSTOMER(CUS_ID),
BOAT_ID VARCHAR(5) CONSTRAINT EXPERIENCE_BOAT_FK REFERENCES BOAT(BOAT_ID),
LEASE_ID VARCHAR(5) CONSTRAINT EXPERIENCE_LEASE_FK REFERENCES LEASE(LEASE_ID),
ROUTE_ID VARCHAR(5) CONSTRAINT EXPERIENCE_ROUTE_fK REFERENCES ROUTE(ROUTE_id),
EXPERIENCE_DESC VARCHAR(40) NOT NULL,
CONSTRAINT EXPERIENCE_PK PRIMARY KEY (CUS_ID,BOAT_ID)
);
CREATE TABLE MAINTENANCE_LOG
(
MAINT_ID VARCHAR(5) CONSTRAINT MAINT_LOG PRIMARY KEY,
BOAT_ID VARCHAR(5) CONSTRAINT MAINT_BOAT_FK REFERENCES BOAT(BOAT_ID),
FACI_ID VARCHAR(5) CONSTRAINT MAINT_FACI_FK REFERENCES MAINT_FACILITY(FACI_ID),
MAINT_DATE DATE,
MAINT_PRICE INT NOT NULL,
MAINT_DESCRIP VARCHAR(50)
);
CREATE TABLE EQUIPMENT_LOG
(
EQUIP_ID VARCHAR(5) CONSTRAINT EQUIP_FK REFERENCES EQUIPMENT(EQUIP_ID),
LEASE_ID VARCHAR(5) CONSTRAINT EQUIP_LEASE_FK REFERENCES LEASE(LEASE_ID),
CONSTRAINT EQUIP_LOG_PK PRIMARY KEY(EQUIP_ID, LEASE_ID)
);
—INSERTING RECORDS INTO OWNER TABLE
INSERT INTO OWNER values (1001,’Farah’,’Ali’,320319549,’saint cloud’);
INSERT INTO OWNER values (1002,’Conor’,’Ronald’,763339568,’sauk Center’);
INSERT INTO OWNER values (1003,’Michael’,’Smith’,911555666,’las vegas’);
INSERT INTO OWNER values (1004,’Tosh’,’bkosh’,455888777,’los angeles’);
INSERT INTO OWNER values (1005,’Olson’,’Bzdok’,811861818,’san francisco’);
–INSERTING RECORDS IN CUSTOMER TABLE
INSERT INTO CUSTOMER VALUES (‘1′,’Aneno’,’Musah’,’50’,’1115656511′,’Denver’);
INSERT INTO CUSTOMER VALUES (‘2′,’Dave’,’East’,’101′,’22555322′,’Minneapolis’);
INSERT INTO CUSTOMER VALUES (‘3′,’Big’,’Abdi’,’200′,’33233331′,’Dallas’);
INSERT INTO CUSTOMER VALUES (‘4′,’Shawn’,’Mendez’,’300′,’44114423′,’Boston’);
INSERT INTO CUSTOMER VALUES (‘5′,’Dale’,’Faai’,’350′,’552645526′,’New york’);
–INSERTING RECORDS INTO CREW TABLE
INSERT INTO CREW VALUES (’11’,’Yaya’,’Ponike’,’20’,’1004441001′);
INSERT INTO CREW VALUES (’22’,’Denis’,’guster’,’30’,’2003322001′);
INSERT INTO CREW VALUES (’33’,’Rahi’,’Abraha’,’30’,’300355445′);
INSERT INTO CREW VALUES (’44’,’Guster’,’Gump’,’40’,’400463502′);
INSERT INTO CREW VALUES (’55’,’Kevin’,’Garnet’,’50’,’500454502′);
–INSERTING RECORDS INTO EQUIPMENT TABLE
INSERT INTO EQUIPMENT VALUES (‘5001′,’SAILS’,’SMALL SIZE’,’100′,’10’);
INSERT INTO EQUIPMENT VALUES (‘5002′,’LINES’,’LONG ONES’,’200′,’20’);
INSERT INTO EQUIPMENT VALUES (‘5003′,’ANCHORS’,’EXPENSIVE’,’542′,’5′);
INSERT INTO EQUIPMENT VALUES (‘5004′,’DINGHIES’,’STRONG’,’45’,’90’);
INSERT INTO EQUIPMENT VALUES (‘5005′,’COMPASS’,’WATER RESISTANT’,’86’,’63’);
–INSERTING RECORDS INTO ROUTE TABLE
INSERT INTO ROUTE VALUES (‘6001′,’palm valley’,’granite rd’,’palm st’,’30’);
INSERT INTO ROUTE VALUES (‘6002′,’greenway village’,’yellow st’,’greenway lane’,’15’);
INSERT INTO ROUTE VALUES (‘6003′,’Lake George’,’division st’,’George lane’,’20’);
INSERT INTO ROUTE VALUES (‘6004′,’mendota heights’,’carson ave’,’mendota ave’,’50’);
INSERT INTO ROUTE VALUES (‘6005′,’pleasant Park’,’parker st’,’pleasant rd’,’60’);
–inserting records into MAINTENANCE FACILITY TABLE —
INSERT INTO MAINT_FACILITY VALUES(‘700′,’Nelsons Shop’,’Mankato’,’566566564′,’2′);
INSERT INTO MAINT_FACILITY VALUES(‘701′,’Ready Shop’,’Minneapolis’,’665665654′,’5′);
INSERT INTO MAINT_FACILITY VALUES(‘703′,’Highway Shop’,’St. Paul’,’775775758′,’4′);
INSERT INTO MAINT_FACILITY VALUES(‘704′,’Stop n Go Shop’,’St. Cloud’,’887887879′,’3′);
INSERT INTO MAINT_FACILITY VALUES(‘705′,’Belevue Shop’,’Brainerd’,’998999987′,’4′);
–INSERTING RECORDS INTO BOAT TABLE
INSERT INTO BOAT VALUES(‘800′,’1001′,’LARGE’,’30’,’no’);
INSERT INTO BOAT VALUES(‘801′,’1002′,’MEDIUM’,’10’,’yes’);
INSERT INTO BOAT VALUES(‘802′,’1003′,’SMALL’,’40’,’no’);
INSERT INTO BOAT VALUES(‘803′,’1004′,’LARGE’,’50’,’yes’);
INSERT INTO BOAT VALUES(‘804′,’1005′,’MEDIUM’,’60’,’no’);
–INSERTING RECORS INTO LEASE TABLE
INSERT INTO LEASE VALUES (‘900′,’800′,’1′,’11’,’6001′,’150′,’10-OCT-2013′,’12-NOV-2013′,’12-NOV-2013′);
INSERT INTO LEASE VALUES (‘901′,’801′,’2′,’22’,’6002′,’150′,’08-OCT-2013′,’22-NOV-2013′,”);
INSERT INTO LEASE VALUES (‘902′,’802′,’3′,’33’,’6003′,’150′,’01-JAN-2013′,’01-FEB-2013′,’25-JAN-2013′);
INSERT INTO LEASE VALUES (‘903′,’803′,’4′,’44’,’6004′,’150′,’01-NOV-2013′,’12-NOV-2013′,”);
INSERT INTO LEASE VALUES (‘904′,’804′,’5′,’55’,’6005′,’150′,’10-OCT-2013′,’20-OCT-2013′,’30-OCT-2013′);
–INSERTING RECORDS INTO EXPEREINCE_HISTORY TABLE
INSERT INTO EXPERIENCE_HISTORY VALUES(‘WORST’,’1′,’800′,’900′,’6001′,’STORMY DAY’);
INSERT INTO EXPERIENCE_HISTORY VALUES(‘BAD’,’2′,’801′,’901′,’6002′,’VERY NICE WEATHER’);
INSERT INTO EXPERIENCE_HISTORY VALUES(‘FAIR’,’3′,’802′,’902′,’6003′,’VERY FRIENDLY CREW MEMBERS’);
INSERT INTO EXPERIENCE_HISTORY VALUES(‘GOOD’,’4′,’803′,’903′,’6004′,’FAIRLY TAKEN CARE OF BOAT’);
INSERT INTO EXPERIENCE_HISTORY VALUES(‘EXCELLENT’,’5′,’804′,’904′,’6005′,’PERFECT CREW’);
–INSERTING RECORS INTO MAINTENANCE_LOG TABLE
INSERT INTO MAINTENANCE_LOG VALUES(‘2000′,’800′,’700′,’22-oct-2013′,’100′,’Painting’);
INSERT INTO MAINTENANCE_LOG VALUES(‘2001′,’801′,’701′,’10-nov-2013′,’50’,’cleaning’);
INSERT INTO MAINTENANCE_LOG VALUES(‘2003′,’802′,’703′,’20-jan-2013′,’60’,’new planks introduced’);
INSERT INTO MAINTENANCE_LOG VALUES(‘2004′,’803′,’704′,’15-aug-2013′,’70’,’new maps ‘);
INSERT INTO MAINTENANCE_LOG VALUES(‘2005′,’804′,’705′,’01-dec-2013′,’80’,’radio fixed’);
–INSERTING RECORDS INTO EQUIPMENT_LOG TABLE
INSERT INTO EQUIPMENT_LOG VALUES(‘5001′,’900’);
INSERT INTO EQUIPMENT_LOG VALUES(‘5002′,’901’);
INSERT INTO EQUIPMENT_LOG VALUES(‘5003′,’902’);
INSERT INTO EQUIPMENT_LOG VALUES(‘5004′,’903’);
INSERT INTO EQUIPMENT_LOG VALUES(‘5005′,’904’);
-trigger 1 , to avoid booking a boat that is already booked and gone
Create Or Replace Trigger Avoid_over_booking
before INSERT ON LEASE
for each row
DECLARE
boat_status VARCHAR2(3);
Begin
Select BOAT_AVAILABILITY
INTO boat_status
FROM BOAT
Where boat_id = :new.boat_id;
DBMS_OUTPUT.PUT_LINE(boat_status);
If boat_status =’no’
Then
Raise_application_error(-20010,’sorry!!! The boat you selected is already booked, try an available boat’);
ELSIF boat_status =’yes’
THEN
UPDATE BOAT
SET BOAT_AVAILABILITY = ‘no’
WHERE BOAT_ID = :new.boat_id;
End if;
End;
/
Show error;
——-trigger 2, calculating final balance after return of the boat
CREATE OR REPLACE TRIGGER Final_Balance
AFTER UPDATE ON LEASE
FOR EACH ROW
DECLARE
old_balance NUMBER(10,3);
additional_balance NUMBER(10,3);
days NUMBER(10,0);
expected_end_date DATE;
actual_end_date DATE;
BEGIN
SELECT CUS_BALANCE
INTO old_balance
FROM CUSTOMER
WHERE CUS_ID=:NEW.CUS_ID;
expected_end_date:= :OLD.LEASE_END_DATE;
actual_end_date:= :new.RETURN_DATE;
days:= actual_end_date-expected_end_date;
IF days > 0 THEN
additional_balance := DAYS * 75;
UPDATE CUSTOMER
SET CUS_BALANCE = :NEW.LEASE_PRICE + additional_balance + old_balance
WHERE CUS_ID = :NEW.CUS_ID;
ELSIF
DAYS < 0 THEN
additional_balance := DAYS * 20;
–since days are negative , additinal balance is negative too
UPDATE CUSTOMER
SET CUS_BALANCE = :NEW.LEASE_PRICE + old_balance + additional_balance
WHERE CUS_ID = :NEW.CUS_ID;
END IF;
UPDATE BOAT
SET BOAT_AVAILABILITY = ‘yes’
WHERE BOAT_ID = :NEW.BOAT_ID;
END;
/
SHOW ERROR;
–trigger 3 , Booking is not allowed if Balance is over $400
CREATE OR REPLACE TRIGGER excess_balance
BEFORE INSERT on LEASE
FOR EACH ROW
DECLARE
Balance_due Number(10,3);
BEGIN
SELECT CUS_BALANCE
INTO Balance_due
FROM CUSTOMER
WHERE CUS_ID = :new.cus_id;
DBMS_OUTPUT.PUT_LINE(Balance_due);
IF Balance_due > 400
THEN
RAISE_APPLICATION_ERROR(-20040,’Sorry!Booking is not allowed for customers with balance due over $400! Pay Your old balance! Thanks!!!’);
END IF;
END;
/
SHOW ERROR;