589 DBMSAssignment6
589 DBMSAssignment6
TASK 1 :
Tables :
Queries & Results :
1)
CREATE OR REPLACE TRIGGER trigger1
BEFORE INSERT ON works_under
FOR EACH ROW
DECLARE
mgr_count NUMBER;
BEGIN
SELECT COUNT(*) INTO mgr_count FROM works_under WHERE SSN = :new.SSN;
IF mgr_count > 0 THEN
RAISE_APPLICATION_ERROR(-20001, 'One employee can work under one manager only');
END IF;
END;
/
INSERT INTO works_under VALUES (10005,10006);
2)
CREATE OR REPLACE TRIGGER trigger2
AFTER INSERT ON works_under
FOR EACH ROW
BEGIN
UPDATE person SET Department = (SELECT Department FROM person WHERE SSN =
:new.MGR_SSN) WHERE SSN = :new.SSN;
END;
/
INSERT INTO works_under VALUES (10007,10003);
SELECT * FROM person;
SELECT * FROM works_under;
3)
CREATE OR REPLACE TRIGGER trigger3
BEFORE INSERT ON wants_to_work_under
FOR EACH ROW
DECLARE
old_mgr_ssn NUMBER;
BEGIN
SELECT MGR_SSN INTO old_mgr_ssn FROM works_under WHERE SSN = :new.SSN;
IF old_mgr_ssn IS NOT NULL AND old_mgr_ssn <> :new.MGR_SSN THEN
DELETE FROM works_under WHERE SSN = :new.SSN AND MGR_SSN = old_mgr_ssn;
UPDATE person SET Department = (SELECT Department FROM person WHERE SSN =
:new.MGR_SSN) WHERE SSN = :new.SSN;
END IF;
END;
/
INSERT INTO wants_to_work_under VALUES(10005,10006);
SELECT * FROM person;
SELECT * FROM works_under;
SELECT * FROM wants_to_work_under;
TASK 2 :
Tables:
Queries & Results :
1. CREATE OR REPLACE TRIGGER update_bill
AFTER INSERT ON PHONE_CALL
FOR EACH ROW
DECLARE
record INT;
BEGIN
SELECT COUNT(*) INTO record FROM BILL WHERE SSN = :new.SSN AND Month = EXTRACT(MONTH
FROM :new.Dates) AND Year = EXTRACT(YEAR FROM :new.Dates);
IF record = 0 THEN
INSERT INTO BILL VALUES(:new.SSN,EXTRACT(MONTH FROM :new.Dates),EXTRACT(YEAR FROM
:new.Dates),0.0);
END IF;
UPDATE BILL
SET Amount = Amount + (SELECT :new.Seconds*p.PricePerSecond FROM PLAN p,CUSTOMER c
WHERE c.SSN = :new.SSN AND p.Plan_Code = c.Plan_Code)
WHERE SSN = :new.SSN AND Month = EXTRACT(MONTH FROM :new.Dates) AND Year =
EXTRACT(YEAR FROM :new.Dates);
END;
/
INSERT INTO PHONE_CALL VALUES('107', TO_DATE('2023-03-30', 'YYYY-MM-DD'),
TO_TIMESTAMP('2023-03-30 09:30:00', 'YYYY-MM-DD HH24:MI:SS'), '90-421', 113);
SELECT * FROM BILL;
UPDATE BILL
SET Amount = Amount + extra_cost
WHERE SSN = :new.SSN AND Month = EXTRACT(MONTH FROM SYSDATE) AND Year =
EXTRACT(YEAR FROM SYSDATE);
SELECT Amount INTO current_bill FROM BILL WHERE SSN = :new.SSN AND Month =
EXTRACT(MONTH FROM SYSDATE) AND Year = EXTRACT(YEAR FROM SYSDATE);