From 25e849ccd0b5cae3820114c16c50948eed1a6fb2 Mon Sep 17 00:00:00 2001 From: Kshitij Date: Sat, 2 Nov 2024 01:14:37 +0530 Subject: [PATCH] Improved queries for A4. - Changed column names for better understanding - Changed dates in inserted data to show all fine cases - Added comments in procdure and changed variable names --- Practical/Assignment-A4+A5/Queries-A4.md | 96 +++++++++++------------- 1 file changed, 44 insertions(+), 52 deletions(-) mode change 100755 => 100644 Practical/Assignment-A4+A5/Queries-A4.md diff --git a/Practical/Assignment-A4+A5/Queries-A4.md b/Practical/Assignment-A4+A5/Queries-A4.md old mode 100755 new mode 100644 index 3740916..9e655f2 --- a/Practical/Assignment-A4+A5/Queries-A4.md +++ b/Practical/Assignment-A4+A5/Queries-A4.md @@ -4,19 +4,19 @@ ```sql CREATE TABLE Borrower ( - Roll_no NUMBER(15), - Name VARCHAR(255), - DateOfIssue DATE, - NameOfBook VARCHAR(255), - Status VARCHAR(255), - PRIMARY KEY(Roll_no) + roll_no INT, + issuer_name VARCHAR(255), + issue_date DATE, + book_name VARCHAR(255), + status VARCHAR(1), + PRIMARY KEY (roll_no) ); CREATE TABLE Fine ( - Roll_no NUMBER(15), - DateOfReturn DATE, - Amount NUMBER(15), - FOREIGN KEY(Roll_no) REFERENCES Borrower(Roll_no) + roll_no INT, + return_date DATE, + amt INT, + FOREIGN KEY (roll_no) REFERENCES Borrower (roll_no) ); ``` @@ -24,71 +24,63 @@ CREATE TABLE Fine ( ## Inserting data ```sql -INSERT INTO Borrower (Roll_no, Name, DateOfIssue, NameOfBook, Status) values (1, 'Ayush Kalaskar', TO_DATE('2024-07-28','YYYY-MM-DD'), 'DBMS', 'I'); - -INSERT INTO Borrower (Roll_no, Name, DateOfIssue, NameOfBook, Status) values (2, 'Himanshu Patil', TO_DATE('2024-07-01','YYYY-MM-DD'),'IOT', 'I'); - -INSERT INTO Borrower (Roll_no, Name, DateOfIssue, NameOfBook, Status) values (3, 'Kshitij', TO_DATE('2024-08-05','YYYY-MM-DD'), 'TOC', 'I'); +INSERT INTO Borrower VALUES (1, 'Kalas', TO_DATE('2024-10-19', 'YYYY-MM-DD'), 'DBMS', 'I'); +INSERT INTO Borrower VALUES (2, 'Himanshu', TO_DATE('2024-10-01', 'YYYY-MM-DD'), 'TOC', 'I'); +INSERT INTO Borrower VALUES (3, 'MEPA', TO_DATE('2024-10-25', 'YYYY-MM-DD'), 'IoT', 'I'); +INSERT INTO Borrower VALUES (4, 'Kshitij', TO_DATE('2024-10-29', 'YYYY-MM-DD'), '1984', 'I'); ``` ## Procedure + ```sql DECLARE - p_nameofbook VARCHAR(255); - p_rollno NUMBER(15) := 1; - p_dateofissue DATE; - currentdate DATE; - noofdays NUMBER(15); - amount NUMBER(15); + p_roll NUMBER; -- specify roll number here since Live SQL cannot take input from user + -- Eg. p_roll NUMBER := 1 will take roll number 1 as input + p_book VARCHAR2(255); -- specify book name here since Live SQL cannot take input from user + -- Eg. p_book VARCHAR2(255) := 'DBMS' + p_issueDate DATE; + totalDays NUMBER; + currentDate DATE; + fineAmt NUMBER; nodata EXCEPTION; BEGIN - p_nameofbook := '&p_nameofbook'; - currentdate := SYSDATE; - - IF p_rollno <= 0 THEN + -- Check if roll number is valid + IF (p_roll <= 0) THEN RAISE nodata; END IF; - SELECT DateOfIssue - INTO p_dateofissue - FROM Borrower - WHERE Roll_no = p_rollno AND NameOfBook = p_nameofbook; + -- Storing values from table in variables + SELECT issue_date INTO p_issueDate FROM Borrower WHERE roll_no = p_roll AND book_name = p_book; - SELECT TRUNC(SYSDATE) - p_dateofissue - INTO noofdays - FROM dual; + -- Getting the total days since book issue + SELECT TRUNC(SYSDATE) - p_issueDate INTO totalDays FROM dual; - DBMS_OUTPUT.PUT_LINE('No of days: ' || noofdays); - IF (noofdays > 30) THEN - amount := noofdays * 50; - ELSIF (noofdays >= 15 AND noofdays <= 30) THEN - amount := noofdays * 5; + -- Calculating fine + IF (totalDays > 30) THEN + fineAmt := totalDays * 50; -- Rs. 50 per day for total days greater than 30 + ELSIF (totalDays BETWEEN 15 AND 30) THEN + fineAmt := totalDays * 5; -- Rs. 5 per day for total days between 15 and 30 ELSE - amount := 0; + fineAmt := 0; END IF; - IF amount > 0 THEN - INSERT INTO Fine (Roll_no, DateOfReturn, Amount) - VALUES (p_rollno, SYSDATE, amount); - END IF; - - IF amount > 0 THEN - UPDATE Borrower - SET Status = 'R' - WHERE Roll_no = p_rollno; + -- Inserting data into Fine table + IF fineAmt > 0 THEN + DBMS_OUTPUT.PUT_LINE('Roll no. ' || p_roll || ' has been fined Rs. ' || fineAmt || ' for being ' || totalDays || ' days late.'); + INSERT INTO Fine VALUES (p_roll, SYSDATE, fineAmt); + ELSE + DBMS_OUTPUT.PUT_LINE('Roll no. ' || p_roll || ' does not have to pay any fine.'); END IF; + UPDATE Borrower SET status = 'R' WHERE roll_no = p_roll AND book_name = p_book; EXCEPTION WHEN nodata THEN - DBMS_OUTPUT.PUT_LINE('Roll number or book name not found.'); - WHEN NO_DATA_FOUND THEN - DBMS_OUTPUT.PUT_LINE('No entry found for the provided roll number and book name.'); + DBMS_OUTPUT.PUT_LINE('Roll number' || p_roll || ' not found.'); WHEN OTHERS THEN - DBMS_OUTPUT.PUT_LINE('An error occurred: ' || SQLERRM); + DBMS_OUTPUT.PUT_LINE('An error occured. Error: ' || SQLERRM); END; / - ```