ABD Mini Projectv2
ABD Mini Projectv2
Mini-project
Part ONE:
A
1. create tablespace LibraryDataTBS datafile ‘LibraryDataDF.dbf’ size
2 m online ;
Bonus:
CREATE USER "osUser" IDENTIFIED EXTERNALLY
DEFAULT TABLESPACE "LIBRARYDATATBS";
GRANT "CONNECT" TO "osUser" ;
GRANT "LIBRARIAN" TO "osUser" ;
B
1.
CREATE TABLE Books (
BookID NUMBER PRIMARY KEY,
Title VARCHAR2(100 BYTE),
ISBN VARCHAR2(20 BYTE)
GenreID NUMBER,
CONSTRAINT fk_genreid FOREIGN KEY (GenreID) REFERENCES
Genre(GenreID)
);
2.
ALTER TABLE Book
ADD CONSTRAINT uk_isbn UNIQUE (ISBN);
3.
ALTER TABLE Book
ADD Transaction_Count NUMBER DEFAULT 0;
4.CREATE OR REPLACE FORCE VIEW
"LIBRARYADMIN"."POPULARBOOK" ("BOOK_ID", "TITLE") AS select
book_id, title from book where Transaction_Count>10;
5. CREATE OR REPLACE FORCE VIEW
"LIBRARYADMIN"."RECENTFICTIONBOOKS" ("BOOK_ID", "TITLE") AS
SELECT book_id , title FROM book
where genre_id in (select genre_id from genre where genre_name
like 'Fiction' );
6.
3.
SELECT membership_type, ROUND(AVG(EXTRACT(YEAR FROM SYSDATE) – birthdate),2) As
“Average_age”,count(*) AS “count” FROM brrower GROUP BY membership_type ;
4.
SELECT DISTINCT BorrowerID
FROM Transaction
WHERE BOOKID IN (
SELECT BookID
FROM BookAuthor
GROUP BY BookID
HAVING COUNT(DISTINCT AuthorID) > 1
);
5.
UPDATE borrower b
SET b.totalOverdueFine =(
SELECT COALESCE(SUM(t.overduefine), 0)
FROM transaction t
WHERE t.borrowerID = b.borrowerID
AND t.returnDate IS NULL
AND t.dueDate< SYSDATE
);
6.
SELECT
b.BORROWERID,
b.BOOKID,
bt.TITLE,
FROM transaction b
4.
Part FOUR:
1. CREATE OR REPLACE FUNCTION calculateAvgFineAmount(p_BorrowerID NUMBER) RETURN
NUMBER IS
v_AvgFineAmount NUMBER;
BEGIN
SELECT AVG(Fine_Amount) INTO v_AvgFineAmount FROM Transaction WHERE Borrower_ID =
p_BorrowerID;
RETURN v_AvgFineAmount;
EXCEPTION
WHEN NO_DATA_FOUND THEN
RETURN NULL; -- Handle the case when no data is found for the borrower ID
END;
2. SET SERVEROUTPUT ON;
DECLARE
CURSOR borrowerCursor IS
v_BorrowerID NUMBER;
v_AvgFineAmount NUMBER;
BEGIN
LOOP
v_BorrowerID := borrowerRec.Borrower_ID;
-- Call the previously defined function to calculate the average fine amount
v_AvgFineAmount := calculateAvgFineAmount(v_BorrowerID);
END LOOP;
END;
8.
CREATE OR REPLACE PROCEDURE UpdateTransactionCount IS
BEGIN
UPDATE book b
SET b.Transaction Count = (
SELECT COUNT(*)
FROM transaction t
WHERE t.bookid = b.BookID );
COMMIT;
END UpdateTransactionCount;
3. CREATE OR REPLACE PROCEDURE recordNewTransaction(
p_BookID NUMBER,
p_BorrowerID NUMBER,
p_BorrowDate DATE,
p_DueDate DATE
)
IS
BEGIN
-- Insert new transaction
INSERT INTO Transaction (Book_ID, Borrower_ID, Borrow_Date,
Due_Date)
VALUES (p_BookID, p_BorrowerID, p_BorrowDate, p_DueDate);