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

93 lines
2.0 KiB
Markdown
Executable File

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