0% found this document useful (0 votes)
15 views19 pages

ABD Mini Projectv2

The document outlines steps to create database objects like users, tables, views, procedures and triggers for a library management system. It includes creating tablespaces, users, tables, constraints, views, roles, functions, procedures and triggers to manage book transactions, calculate fines and enforce borrowing limits.

Uploaded by

Radhwan Khateeb
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
15 views19 pages

ABD Mini Projectv2

The document outlines steps to create database objects like users, tables, views, procedures and triggers for a library management system. It includes creating tablespaces, users, tables, constraints, views, roles, functions, procedures and triggers to manage book transactions, calculate fines and enforce borrowing limits.

Uploaded by

Radhwan Khateeb
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 19

Introduction in Database Administration

Mini-project

Part ONE:
A
1. create tablespace LibraryDataTBS datafile ‘LibraryDataDF.dbf’ size
2 m online ;

2/3. create user LibraryAdmin identified by 000 default tablespace


LibraryDataTBS quota unlimited on users password expire account lock ;

4. GRANT dba to LibraryAdmin ;

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

CREATE TABLE Author (


AuthorID NUMBER PRIMARY KEY,
FirstName VARCHAR2(50 BYTE),
LastName VARCHAR2(50 BYTE)
);

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.

7. SELECT ROUND(SUM(bytes)/1024)AS size_kb


FROM user_segments WHERE segment_name=’TRANSACTION’ ;
Part TWO:
1.
select distinct B.Book_id,title, isbn
from book B, author A, bookauthor BA
where B.book_id=BA.book_id and A.author_id=BA.author_id
and title like 'T%';

2.UPDATE Book set title =UPPER(title);

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,

TRUNC(SYSDATE) - GREATEST(COALESCE(b.RETURNDATE, b.DUEDATE)) AS OVERDUEDAYS

FROM transaction b

INNER JOIN BOOK bt ON b.BOOKID = bt.BOOKID

WHERE b.RETURNDATE IS NULL AND SYSDATE > b.DUEDATE;


Part THREE:
1/2 .
CREATE PROFILE "LibraryProfile" LIMIT CPU PER SESSION 45000
CPU PER CALL DEFAULT CONNECT TIME 20 IDLE TIME 30 SESSIONS PER
USER 1 LOGICAL READS_ PER SESSION 40960 LOGICAL READS PER CALL
DEFAULT PRIVATE SGA DEFAULT COMPOSITE LIMIT DEFAULT PASSWORD
LIFE TIME 5 PASSWORD GRACE TIME DEFAULT PASSWORD REUSE MAX
DEFAULT PASSWORD REUSE TIME DEFAULT PASSWORD VERIFY
FUNCTION null FAILED LOGIN ATTEMPTS 3 PASSWORD LOCK TIME 1
3.

GRANT SELECT ON POPULARBOOKS TO HR;

4.

CREATE ROLE Librarian;


GRANT SELECT ON Book TO Librarian;
GRANT SELECT ON Borrower TO Librarian;
GRANT SELECT, INSERT, UPDATE, DELETE ON Transaction TO Librarian;

5.GRANT Librarian TO LibrarianUser;


6..

SELECT * FROM LibraryAdmin.TRANSACTION ;


7. the pourcentage is 0%

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

-- Define a cursor to retrieve distinct borrower IDs

CURSOR borrowerCursor IS

SELECT DISTINCT Borrower_ID FROM Transaction;

v_BorrowerID NUMBER;

v_AvgFineAmount NUMBER;

BEGIN

-- Loop through each distinct borrower ID

FOR borrowerRec IN borrowerCursor

LOOP

-- Retrieve the borrower ID from the current cursor record

v_BorrowerID := borrowerRec.Borrower_ID;

-- Call the previously defined function to calculate the average fine amount

v_AvgFineAmount := calculateAvgFineAmount(v_BorrowerID);

-- Display the results

DBMS_OUTPUT.PUT_LINE('Borrower ID: ' || v_BorrowerID || ', Average Fine Amount: ' ||


TO_CHAR(v_AvgFineAmount));

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

-- Update book availability status


UPDATE Book
SET Availability_Status = 'Not Available'
WHERE Book_ID = p_BookID;

COMMIT; -- Commit the transaction


END;
4.
CREATE OR REPLACE TRIGGER validateDueDate
BEFORE INSERT ON Transaction
FOR EACH ROW
BEGIN
IF :NEW.Due_Date < :NEW.Borrow_Date THEN
RAISE_APPLICATION_ERROR(-20001, 'Due date cannot be earlier
than borrow date.');
END IF;
END;
5.

CREATE OR REPLACE TRIGGER enforceBookLimit


BEFORE INSERT ON Transaction
FOR EACH ROW
DECLARE
v_BookCount NUMBER;
BEGIN
-- Count the number of books already borrowed by the borrower
SELECT COUNT(*) INTO v_BookCount
FROM Transaction
WHERE Borrower_ID = :NEW.Borrower_ID;

-- Check if the borrower is exceeding the limit of three books


IF v_BookCount >= 3 THEN
RAISE_APPLICATION_ERROR(-20002, 'Borrowers cannot borrow more
than three books at a time.');
END IF;
END;
6.
CREATE OR REPLACE TRIGGER CHECKOVERDUETRANSACTIONS
BEFORE INSERT OR UPDATE ON TRANSACTION
FOR EACH ROW
DECLARE
v overdue count NUMBER;
BEGIN
SELECT COUNT(*)
INTO v_overdue_count FROM transaction
WHERE BorrowerlD= :new.BorrowerlD
AND DueDate< SYSDATE AND
ReturnDate IS NULL;
IF v_overdue_count>= 10 THEN
RAISE APPLICATION ERROR(-20001, 'Borrower cannot have more than
10 overdue transactions.');
END IF;
END CheckOverdueTransactions;

You might also like

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy