0% found this document useful (0 votes)
37 views9 pages

589 DBMSAssignment6

The document describes four database triggers that are created to update billing records when phone calls are made or a customer changes their phone plan. The triggers check for conditions like the same or different service providers, current bill amount, and plan change fees to calculate billing amounts.

Uploaded by

rohit Kumar
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
37 views9 pages

589 DBMSAssignment6

The document describes four database triggers that are created to update billing records when phone calls are made or a customer changes their phone plan. The triggers check for conditions like the same or different service providers, current bill amount, and plan change fees to calculate billing amounts.

Uploaded by

rohit Kumar
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 9

ASSIGNMENT – 6

NAME: RAUNAK SUNIL


REG NO.: 589
ROLL NO.: CSE/20069

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;

2. CREATE OR REPLACE TRIGGER plan_change


AFTER UPDATE OF Plan_Code ON CUSTOMER
FOR EACH ROW
DECLARE
extra_cost NUMBER(10,2);
current_bill NUMBER(10,2);
BEGIN
IF :new.Plan_Code <> :old.Plan_Code THEN
SELECT ConnectionFee INTO extra_cost FROM PLAN WHERE Plan_Code = :new.Plan_Code;

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

DBMS_OUTPUT.PUT_LINE('Extra cost for plan change: Rs ' || extra_cost);


DBMS_OUTPUT.PUT_LINE('Current bill: Rs ' || current_bill);
END IF;
END;
/
UPDATE CUSTOMER
SET Plan_Code = 'P002' WHERE SSN = '101';

3. CREATE OR REPLACE TRIGGER update_bill


AFTER INSERT ON PHONE_CALL
FOR EACH ROW
DECLARE
current_amt NUMBER;
BEGIN
SELECT Amount INTO current_amt FROM BILL
WHERE SSN = :new.SSN AND Month = EXTRACT(MONTH FROM SYSDATE) AND Year =
EXTRACT(YEAR FROM SYSDATE);

IF current_amt >= 2000 THEN


DBMS_OUTPUT.PUT_LINE('CURRENT BILL AMT GREATER THAN 2000');
UPDATE BILL
SET Amount = Amount + (SELECT :new.Seconds*p.PricePerSecond*0.5 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 SYSDATE) AND Year =
EXTRACT(YEAR FROM SYSDATE);
ELSE
DBMS_OUTPUT.PUT_LINE('CURRENT BILL AMT LESS THAN 2000');
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 SYSDATE) AND Year =
EXTRACT(YEAR FROM SYSDATE);
END IF;
END;
/
INSERT INTO PHONE_CALL VALUES('106', TO_DATE('2023-03-30', 'YYYY-MM-DD'),
TO_TIMESTAMP('2022-03-30 12:30:00', 'YYYY-MM-DD HH24:MI:SS'), '55-568', 100);
SELECT * FROM BILL;

4. CREATE OR REPLACE TRIGGER update_bill


BEFORE INSERT ON PHONE_CALL
FOR EACH ROW
DECLARE
customer_provider VARCHAR2(2);
called_provider VARCHAR2(2);
BEGIN
SELECT SUBSTR(PhoneNum, 1, 2) INTO customer_provider FROM CUSTOMER WHERE SSN = :new.SSN;
called_provider := SUBSTR(:new.CalledNum, 1, 2);

IF customer_provider = called_provider THEN


DBMS_OUTPUT.PUT_LINE('SAME SERVICE PROVIDERS : ' || customer_provider);
UPDATE BILL
SET Amount = Amount + (SELECT :new.Seconds*p.PricePerSecond*0.5 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 SYSDATE) AND Year = EXTRACT(YEAR
FROM SYSDATE);
ELSE
DBMS_OUTPUT.PUT_LINE('DIFFERENT SERVICE PROVIDERS');
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 SYSDATE) AND Year = EXTRACT(YEAR
FROM SYSDATE);
END IF;
END;
/
INSERT INTO PHONE_CALL VALUES('102', TO_DATE('2023-03-30', 'YYYY-MM-DD'),
TO_TIMESTAMP('2022-03-30 13:45:00', 'YYYY-MM-DD HH24:MI:SS'), '55-911', 200);
SELECT * FROM BILL;

You might also like