ADV DB SCREENSHOTS

16

Transcript of ADV DB SCREENSHOTS

Page 1: ADV DB SCREENSHOTS
Page 2: ADV DB SCREENSHOTS

BRANCH

BRANCH _MANAGER

BRANCH_SUPPLIERS

Page 3: ADV DB SCREENSHOTS

CUSTOMER

INVOICE

ORDERS

Page 4: ADV DB SCREENSHOTS

ORDER_PART

PARTS

Page 5: ADV DB SCREENSHOTS

PAYMENT

SERVICE

SERVICE_STOCK

SERVICE _TYPE

SPECIALIST

Page 6: ADV DB SCREENSHOTS

STAFF

STOCK

Page 7: ADV DB SCREENSHOTS

SUBPART

SUPPLIERS

VEHICLE

Page 8: ADV DB SCREENSHOTS

VEHICLE_PARTS

3.1

CREATE OR REPLACE FUNCTION INVOICETOTAL( --- This function will apply to InvoiceTotal I_IN_ID INVOICE.IN_ID%TYPE) --- the customer bill Return NumberRETURN NUMBERIS V_INVOICE_TOTAL INVOICE.TOTAL%TYPE;

BEGIN

SELECT SUM(LABOUR_COST+SET_PRICE+P_PRICE) --- The select statement will sum labour cost, service price and part price INTO V_INVOICE_TOTAL FROM SERVICE,SERVICE_TYPE,PARTS,STOCK,SERVICE_STOCK --- will retrieve details from this table WHERE SERVICE_TYPE.SET_ID=SERVICE.SET_ID --- join tables together using thier primary key AND PARTS.P_ID=STOCK.P_ID AND STOCK.ST_ID=SERVICE_STOCK.ST_ID AND SERVICE.SER_ID=SERVICE_STOCK.SER_ID AND SERVICE.SER_ID = I_IN_ID;

RETURN V_INVOICE_TOTAL; --- returns v_invoice_total back to procedure

END ;/

Page 9: ADV DB SCREENSHOTS

CREATE OR REPLACE PROCEDURE POP_AMOUNTOTAL --- creat procedure to populate AmountTotalASCURSOR C_INVOICE --- cursor that holds the select statementISSELECT SER_ID --- create a select statment FROM SERVICE;-- SELECT IN_ID-- FROM INVOICE;

V_IN_ID INVOICE.IN_ID%TYPE; --- declare variablesV_INVOICE_TOTAL INVOICE.TOTAL%TYPE;

BEGINOPEN C_INVOICE;LOOP --- will execute sequence of statement FETCH C_INVOICE INTO V_IN_ID; --- fetches the invoice into the variable V_IV_ID EXIT WHEN C_INVOICE%NOTFOUND; --- exit loop if condition is true

V_INVOICE_TOTAL := INVOICETOTAL(V_IN_ID); /* calls function, with SER_ID */

DBMS_OUTPUT.PUT_LINE('TOTAL AMOUNT IS :'|| TO_CHAR(V_INVOICE_TOTAL));

-- UPDATE INVOICE --- Update the invoice total-- SET TOTAL=V_INVOICE_TOTAL-- WHERE IN_ID=V_IN_ID;

END LOOP;

DBMS_OUTPUT.PUT_LINE('TOTAL = ' || TO_CHAR(V_INVOICE_TOTAL)); CLOSE C_INVOICE;END;/

Page 10: ADV DB SCREENSHOTS

3.2. CREATE OR REPLACE TRIGGER LIMIT_BRANCH_TO_10_SERVICE --- create a before trigger to check serviceBEFORE UPDATE OR INSERT ON SERVICEFOR EACH ROW

DECLARE SERVICECOUNT NUMBER; --- declare variables MAX_SERVICE NUMBER := 10;BEGIN

SELECT COUNT(*) --- The select statement will count number ofINTO SERVICECOUNT --- vehicle serviced in a particular branchFROM SERVICE --- statement count all from service tableWHERE S_DATE = :NEW.S_DATEAND B_ID = :NEW.B_ID;

IF SERVICECOUNT <= MAX_SERVICE THEN --- will be raised when above if statment equals true RAISE_APPLICATION_ERROR (-20000,'BRANCH_' ||:NEW.B_ID || ' IS FULL FOR SERVICES. PLEASE TRY ANOTHER BRANCH'); END IF;

END;/

Page 11: ADV DB SCREENSHOTS

3.3.

CREATE OR REPLACE TRIGGER CHECK_STOCK --- CREATE A TRIGGER TO CHECK_STOCKBEFORE INSERT OR UPDATE OF QINS,MOH ON STOCKFOR EACH ROWDECLARE CURSOR C_STK IS --- CREATE A CURSOR WITH THE SELECT STATEMENT BELOWSELECT S_NAME,SU_NAMEFROM STAFF E, SUPPLIERS S, BRANCH B, BRANCH_SUPPLIERS A --- STATEMENT FETCHES STAFF NAME AND SUPPLIER NAMEWHERE E.S_ID=:new.S_IDAND B.B_ID=:new.B_IDAND S.SU_ID = A.SU_ID;V_S_N STAFF.S_NAME%TYPE;V_SU_N SUPPLIERS.SU_NAME%TYPE;

BEGIN

OPEN C_STK; --- opens cursor and populates

FETCH C_STK INTO V_S_N,V_SU_N; --- variables V_S_N and V_SU_N

IF:NEW.QINS<= :NEW.MOH THEN --- checks newly inserted/updated stock quantity against minimum stock:NEW.REORDER := 'YES'; --- if stock quantity lower than minimum stock then display the msg belowDBMS_OUTPUT.PUT_LINE('XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX');--- message will display staff name andDBMS_OUTPUT.PUT_LINE(V_S_N||' RE-ORDER STOCK FOR '|| :NEW.ST_ID||' FROM '||V_SU_N); --- supplier name for that stockDBMS_OUTPUT.PUT_LINE('XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX');ELSE:NEW.REORDER :='NO'; --- if stock quantity higher than minimum stock then display the msg belowDBMS_OUTPUT.PUT_LINE('XXXXXXXXXXXXXXXXXXXXXXXXXXXX');DBMS_OUTPUT.PUT_LINE('STOCK LEVEL GOOD FOR '|| :NEW.ST_ID);DBMS_OUTPUT.PUT_LINE('XXXXXXXXXXXXXXXXXXXXXXXXXXXX');END IF;

END;/

Page 12: ADV DB SCREENSHOTS

Below is the stock quantity in stock and minimum in hand.

After the trigger is created, stock ST81 is updated to be lower than minimum in hand, and the message display below.

The table above shows which stock needs to be reordered.

Page 13: ADV DB SCREENSHOTS

When the stock quantity is above the minimum stock, the message above display for that stock.

The minimum quantity in stock table above, displays message when it’s updated

INTEGRITY CONSTRAINTS

4.1. Customer gender should be recorded as ‘M’ or ‘F’.

ALTER TABLE CUSTOMER ADD CONSTRAINT GENDER CHECK (C_GENDER IN ('M','F'));

4.2. The Supplier’s name must be Unique and not null.

ALTER TABLE SUPPLIERS ADD CONSTRAINT SU_NAME UNIQUE (SU_NAME) MODIFY SU_NAME NOT NULL;

Page 14: ADV DB SCREENSHOTS

4.3. Implement at least one table that demonstrate primary and foreign key constraints using the ALTER TABLE command.

ALTER TABLE CITY ADD PRIMARY KEY (CITY_ID) ADD FOREIGN KEY (COUNTRY_ID) REFERENCES COUNTRY (COUNTRY_ID);

END USER QUESTIONS

4.4 Can you list all customers’ details?

SELECT * FROM CUSTOMER;

Page 15: ADV DB SCREENSHOTS

4.5 List all the customers, their car details in for a service and the mechanic who made the booking.

SELECT A.C_NO,D.V_ID,A.V_MAKE,A.V_MODEL,A.CURRENT_MILEAGE,D.S_ID_BK,D.SER_IDFROM SERVICE D,CUSTOMER C,STAFF B,VEHICLE AWHERE A.C_NO=C.C_NOAND D.V_ID=A.V_IDAND D.S_ID_BK=B.S_ID;

4.6. List by branch the number of cars booked in for service at each branch order by date.

SELECT C.B_ID,B.NAME,C.V_ID,A.V_MAKE,C.SER_ID,C.S_DATE,COUNT(*)AS"NUMBER OF VEHICLES"FROM SERVICE C,BRANCH B,VEHICLE AWHERE C.B_ID=B.B_IDAND C.V_ID=A.V_IDGROUP BY C.B_ID,B.NAME,C.V_ID,A.V_MAKE,C.SER_ID,C.S_DATEORDER BY S_DATE;

Page 16: ADV DB SCREENSHOTS

4.7. Can you list all the sub-parts that go into the Vauxhall Astra’s engine and their individual prices?

SELECT DISTINCT P_NAME,P_PRICE,V_MODEL,V_MAKEFROM PARTS, VEHICLE, SUBPARTS, VEHICLE_PARTSWHERE PARTS.P_ID=VEHICLE_PARTS.P_IDAND VEHICLE.V_ID=VEHICLE_PARTS.V_IDAND PARTS.P_ID=SUBPARTS.PART2AND VEHICLE.V_MAKE='VAUXHALL'AND VEHICLE.V_MODEL='ASTRA';