diff --git a/Practical/Assignment-A4+A5/Queries-A4.md b/Practical/Assignment-A4+A5/Queries-A4.md index f5b1900..c62c096 100755 --- a/Practical/Assignment-A4+A5/Queries-A4.md +++ b/Practical/Assignment-A4+A5/Queries-A4.md @@ -1,75 +1,91 @@ -## Creating tables & inserting data +## Creating tables -Student marks: ```sql -CREATE TABLE Stud_Marks( - Roll NUMBER(14), - name VARCHAR(255), - total_marks NUMBER(14), - PRIMARY KEY(Roll) +CREATE TABLE Borrower ( + Roll_no NUMBER(15), + Name VARCHAR(255), + DateOfIssue DATE, + NameOfBook VARCHAR(255), + Status VARCHAR(255), + PRIMARY KEY(Roll_no) ); -INSERT INTO Stud_Marks VALUES (1, 'Arora', 1350); -INSERT INTO Stud_Marks VALUES (2, 'Shankar', 979); -INSERT INTO Stud_Marks VALUES (3, 'Lara', 834); -INSERT INTO Stud_Marks VALUES (4, 'Jambo', 667); -INSERT INTO Stud_Marks VALUES (5, 'Tinde', 1400); +CREATE TABLE Fine ( + Roll_no NUMBER(15), + DateOfReturn DATE, + Amount NUMBER(15), + FOREIGN KEY(Roll_no) REFERENCES Borrower(Roll_no) +); ``` -Result: +## Inserting data + ```sql -CREATE TABLE Result( - Roll NUMBER(14), - name VARCHAR(255), - Class VARCHAR(255), - FOREIGN KEY (Roll) REFERENCES Stud_Marks (Roll) -); +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'); ``` ## Procedure ```sql -CREATE OR REPLACE PROCEDURE proc_grade -(rollno in number, - p_roll_no out Stud_Marks.Roll%type, - p_name out Stud_Marks.name%type, - p_total out Stud_Marks.total_marks%type) -AS -BEGIN - SELECT Roll, name, total_marks into p_roll_no, p_name, p_total from Stud_Marks WHERE Roll = rollno; - IF p_total <= 1500 and p_total >= 990 - THEN - INSERT INTO Result VALUES (p_roll_no, p_name, 'Distinction'); - ELSE IF p_total <= 989 and p_total >= 900 - THEN - INSERT INTO Result VALUES (p_roll_no, p_name, 'First Class'); - ELSE IF p_total <= 899 and p_total >= 825 - THEN - INSERT INTO Result VALUES (p_roll_no, p_name, 'Higher Second Class'); - ELSE - INSERT INTO Result VALUES (p_roll_no, p_name, 'FAIL'); - END IF; - END IF; - END IF; -EXCEPTION - WHEN no_data_found THEN - dbms_output.put_line('Rollno ' || rollno || ' is not present!!'); -END; -/ - -``` - -## Calling Procedure: -```sql DECLARE - rollno number(14); - p_roll_no Stud_Marks.Roll%type; - p_name Stud_Marks.name%type; - p_total_marks Stud_Marks.total_marks%type; + p_nameofbook VARCHAR(255); + p_rollno NUMBER(15) := 1; + p_dateofissue DATE; + currentdate DATE; + noofdays NUMBER(15); + amount NUMBER(15); + nodata EXCEPTION; + BEGIN - rollno := &rollno; - proc_grade(rollno, p_roll_no, p_name, p_total_marks); + p_nameofbook := '&p_nameofbook'; + currentdate := SYSDATE; + + IF p_rollno <= 0 THEN + RAISE nodata; + END IF; + + SELECT DateOfIssue + INTO p_dateofissue + FROM Borrower + WHERE Roll_no = p_rollno AND NameOfBook = p_nameofbook; + + SELECT TRUNC(SYSDATE) - p_dateofissue + INTO noofdays + 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; + ELSE + amount := 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; + END IF; + +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.'); + WHEN OTHERS THEN + DBMS_OUTPUT.PUT_LINE('An error occurred: ' || SQLERRM); + END; /