## Creating tables ```sql CREATE TABLE Borrower ( Roll_no NUMBER(15), Name VARCHAR(255), DateOfIssue DATE, NameOfBook VARCHAR(255), Status VARCHAR(255), PRIMARY KEY(Roll_no) ); CREATE TABLE Fine ( Roll_no NUMBER(15), DateOfReturn DATE, Amount NUMBER(15), FOREIGN KEY(Roll_no) REFERENCES Borrower(Roll_no) ); ``` ## 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'); ``` ## Procedure ```sql DECLARE p_nameofbook VARCHAR(255); p_rollno NUMBER(15) := 1; p_dateofissue DATE; currentdate DATE; noofdays NUMBER(15); amount NUMBER(15); nodata EXCEPTION; BEGIN 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; / ```