DatabaseManagementSystems/Practical/Assignment-A4+A5/Queries-A4.md

2.0 KiB
Executable File

Creating tables

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

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

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