├── Library.sql
├── Library.xml
└── README.md
/Library.sql:
--------------------------------------------------------------------------------
1 | --LIBRARY PROJECT--
2 |
3 | --CREATE TABLES--
4 | CREATE TABLE Card(
5 | cardID NUMBER,
6 | status VARCHAR2(1) CHECK ((status = 'A') OR (status = 'B')),
7 | fines NUMBER,
8 | CONSTRAINT Card_PK PRIMARY KEY (cardID));
9 |
10 | CREATE TABLE Customer(
11 | customerID NUMBER,
12 | name VARCHAR2(40),
13 | customerAddress VARCHAR2(50),
14 | phone NUMBER(9),
15 | password VARCHAR2(20),
16 | userName VARCHAR2(10),
17 | dateSignUp DATE,
18 | cardNumber NUMBER,
19 | CONSTRAINT Customer_PK PRIMARY KEY (customerID));
20 |
21 | CREATE TABLE Employee(
22 | employeeID NUMBER,
23 | name VARCHAR2(40),
24 | employeeAddress VARCHAR2(50),
25 | phone NUMBER(9),
26 | password VARCHAR2(20),
27 | userName VARCHAR2(10),
28 | paycheck NUMBER (8, 2),
29 | branchName VARCHAR2(40),
30 | cardNumber NUMBER,
31 | CONSTRAINT Employee_PK PRIMARY KEY (employeeID));
32 |
33 | CREATE TABLE Branch(
34 | name VARCHAR2(40),
35 | address VARCHAR2(50),
36 | phone NUMBER(9),
37 | CONSTRAINT Branch_PK PRIMARY KEY (name));
38 |
39 | CREATE TABLE Location(
40 | address VARCHAR2(50),
41 | CONSTRAINT Location_PK PRIMARY KEY (address));
42 |
43 | CREATE TABLE Rent(
44 | cardID NUMBER,
45 | itemID VARCHAR2(6),
46 | apporpriationDate DATE,
47 | returnDate DATE,
48 | CONSTRAINT Rent_PK PRIMARY KEY (cardID,itemID));
49 |
50 | CREATE TABLE Book(
51 | ISBN VARCHAR2(4),
52 | bookID VARCHAR2(6),
53 | state VARCHAR2(10),
54 | avalability VARCHAR2(1) CHECK ((avalability = 'A') OR (avalability = 'O')),
55 | debyCost NUMBER(10,2),
56 | lostCost NUMBER(10,2),
57 | address VARCHAR2(50),
58 | CONSTRAINT Book_PK PRIMARY KEY (ISBN,bookID));
59 |
60 | CREATE TABLE Video(
61 | title VARCHAR2(50),
62 | year INT,
63 | videoID VARCHAR2(6),
64 | state VARCHAR2(10),
65 | avalability VARCHAR2(1) CHECK ((avalability = 'A') OR (avalability = 'O')),
66 | debyCost NUMBER(10,2),
67 | lostCost NUMBER(10,2),
68 | address VARCHAR(50),
69 | CONSTRAINT Video_PK PRIMARY KEY (title,year,videoID));
70 |
71 |
72 | --SELECT--
73 | SELECT * FROM Card;
74 | SELECT * FROM Customer;
75 | SELECT * FROM Employee;
76 | SELECT * FROM Branch;
77 | SELECT * FROM Location;
78 | SELECT * FROM Book;
79 | SELECT * FROM Video;
80 | SELECT * FROM Rent;
81 |
82 |
83 | --DROP TABLES--
84 | DROP TABLE Card;
85 | DROP TABLE Customer;
86 | DROP TABLE Employee;
87 | DROP TABLE Branch;
88 | DROP TABLE Location;
89 | DROP TABLE Book;
90 | DROP TABLE Video;
91 | DROP TABLE Rent;
92 |
93 |
94 | --FOREIGN KEYS--
95 | ALTER TABLE Customer
96 | ADD CONSTRAINT Customer_FK
97 | FOREIGN KEY (cardNumber)
98 | REFERENCES Card(cardID);
99 |
100 | ALTER TABLE Employee
101 | ADD CONSTRAINT Employee_FK_Card
102 | FOREIGN KEY (cardNumber)
103 | REFERENCES Card(cardID);
104 |
105 | ALTER TABLE Employee
106 | ADD CONSTRAINT Employee_FK_Branch
107 | FOREIGN KEY (branchName)
108 | REFERENCES Branch(name);
109 |
110 | ALTER TABLE Branch
111 | ADD CONSTRAINT Branch_FK
112 | FOREIGN KEY (address)
113 | REFERENCES Location(address);
114 |
115 | ALTER TABLE Book
116 | ADD CONSTRAINT Book_FK
117 | FOREIGN KEY (address)
118 | REFERENCES Location(address);
119 |
120 | ALTER TABLE Video
121 | ADD CONSTRAINT Video_FK
122 | FOREIGN KEY (address)
123 | REFERENCES Location(address);
124 |
125 | ALTER TABLE Rent
126 | ADD CONSTRAINT Rent_FK_Card
127 | FOREIGN KEY (cardID)
128 | REFERENCES Card(cardID);
129 |
130 | ALTER TABLE Rent
131 | ADD CONSTRAINT Rent_FK_Book
132 | FOREIGN KEY (itemID)
133 | REFERENCES Book(bookID);
134 |
135 | ALTER TABLE Rent
136 | ADD CONSTRAINT Rent_FK_Video
137 | FOREIGN KEY (itemID)
138 | REFERENCES Video(videoID);
139 |
140 |
141 | --INSERTS--
142 | INSERT INTO Card VALUES (101,'A',0);
143 | INSERT INTO Card VALUES (102,'A',0);
144 | INSERT INTO Card VALUES (103,'A',0);
145 | INSERT INTO Card VALUES (104,'A',0);
146 | INSERT INTO Card VALUES (105,'A',0);
147 | INSERT INTO Card VALUES (106,'A',0);
148 | INSERT INTO Card VALUES (107,'B',50);
149 | INSERT INTO Card VALUES (108,'B',10);
150 | INSERT INTO Card VALUES (109,'B',25.5);
151 | INSERT INTO Card VALUES (110,'B',15.25);
152 | INSERT INTO Card VALUES (151,'A',0);
153 | INSERT INTO Card VALUES (152,'A',0);
154 | INSERT INTO Card VALUES (153,'A',0);
155 | INSERT INTO Card VALUES (154,'A',0);
156 | INSERT INTO Card VALUES (155,'A',0);
157 |
158 | INSERT INTO Branch VALUES ('ARCHEOLOGY', 'ARCHEOLOGY ROAD', 645645645);
159 | INSERT INTO Branch VALUES ('CHEMISTRY', 'CHEMISTRY ROAD', 622622622);
160 | INSERT INTO Branch VALUES ('COMPUTING', 'COMPUTING ROAD', 644644644);
161 | INSERT INTO Branch VALUES ('PHYSICS', 'PHYSICS ROAD', 666666666);
162 |
163 | INSERT INTO Customer VALUES (1, 'ALFRED', 'BACON STREET', 623623623, 'alfred123', 'al1', '12-05-2018', 101);
164 | INSERT INTO Customer VALUES (2, 'JAMES', 'DOWNTOWN ABBEY', 659659659, 'james123', 'ja2', '10-05-2018', 102);
165 | INSERT INTO Customer VALUES (3, 'GEORGE', 'DETROIT CITY', 654654654, 'george123', 'ge3', '21-06-2017', 103);
166 | INSERT INTO Customer VALUES (4, 'TOM', 'WASHINGTON DC.', 658658658, 'tom123', 'tom4', '05-12-2016', 104);
167 | INSERT INTO Customer VALUES (5, 'PETER', 'CASTERLY ROCK', 652652652, 'peter123', 'pe5', '09-08-2016', 105);
168 | INSERT INTO Customer VALUES (6, 'JENNY', 'TERRAKOTA', 651651651, 'jenny123', 'je6', '30-04-2017', 106);
169 | INSERT INTO Customer VALUES (7, 'ROSE', 'SWEET HOME ALABAMA', 657657657, 'rose123', 'ro7', '28-02-2018', 107);
170 | INSERT INTO Customer VALUES (8, 'MONICA', 'FAKE STREET 123', 639639639, 'monica123', 'mo8', '15-01-2016', 108);
171 | INSERT INTO Customer VALUES (9, 'PHOEBE', 'CENTRAL PERK', 678678678, 'phoebe123', 'pho9', '25-03-2016', 109);
172 | INSERT INTO Customer VALUES (10, 'RACHEL', 'WHEREVER', 687687687, 'rachel123', 'ra10', '01-09-2017', 110);
173 |
174 | INSERT INTO Employee VALUES (211, 'ROSS', 'HIS HOUSE', 671671671, 'ross123', 'ro11', 1200, 'ARCHEOLOGY', 551);
175 | INSERT INTO Employee VALUES (212, 'CHANDLER', 'OUR HEARTHS', 688688688, 'chandler123', 'chand12', 1150.50, 'ARCHEOLOGY', 552);
176 | INSERT INTO Employee VALUES (213, 'JOEY', 'LITTLE ITAYLY', 628628628, 'joey123', 'jo13', 975.75, 'ARCHEOLOGY', 553);
177 | INSERT INTO Employee VALUES (214, 'VICTOR', 'SANTA FE', 654321987, 'victor123', 'vic14', 2200, 'COMPUTING', 554);
178 | INSERT INTO Employee VALUES (215, 'JAIRO', 'ARMILLA', 698754321, 'jairo123', 'ja15', 2200.50, 'CHEMISTRY', 555);
179 |
180 | INSERT INTO Location VALUES ('ARCHEOLOGY ROAD');
181 | INSERT INTO Location VALUES ('CHEMISTRY ROAD');
182 | INSERT INTO Location VALUES ('COMPUTING ROAD');
183 | INSERT INTO Location VALUES ('PHYSICS ROAD');
184 |
185 | INSERT INTO Book VALUES ('A123', 'B1A123', 'GOOD', 'A', 5, 20, 'ARCHEOLOGY ROAD');
186 | INSERT INTO Book VALUES ('A123', 'B2A123', 'NEW', 'O', 6, 30, 'ARCHEOLOGY ROAD');
187 | INSERT INTO Book VALUES ('B234', 'B1B234', 'NEW', 'A', 2, 15, 'CHEMISTRY ROAD');
188 | INSERT INTO Book VALUES ('C321', 'B1C321', 'BAD', 'A', 1, 10, 'PHYSICS ROAD');
189 | INSERT INTO Book VALUES ('H123', 'B1H123', 'GOOD', 'A', 3, 15, 'CHEMISTRY ROAD');
190 | INSERT INTO Book VALUES ('Z123', 'B1Z123', 'GOOD', 'O', 4, 20, 'COMPUTING ROAD');
191 | INSERT INTO Book VALUES ('L321', 'B1L321', 'NEW', 'O', 4, 20, 'COMPUTING ROAD');
192 | INSERT INTO Book VALUES ('P321', 'B1P321', 'USED', 'A', 2, 12, 'CHEMISTRY ROAD');
193 |
194 | INSERT INTO Video VALUES ('CHEMISTRY FOR DUMMIES', 2016, 'V1CH16', 'NEW', 'O', 10, 50, 'CHEMISTRY ROAD');
195 | INSERT INTO Video VALUES ('CHEMISTRY FOR DUMMIES', 2016, 'V2CH16', 'BAD', 'A', 5, 20, 'CHEMISTRY ROAD');
196 | INSERT INTO Video VALUES ('COMPUTING MANAGER', 2014, 'V1CO14', 'GOOD', 'A', 4, 20, 'COMPUTING ROAD');
197 | INSERT INTO Video VALUES ('JAVA LANGUAGE', 2015, 'V1JA15', 'USED', 'O', 4, 20, 'COMPUTING ROAD');
198 | INSERT INTO Video VALUES ('DINOSAURS', 2000, 'V1DI00', 'GOOD', 'O', 5, 25, 'ARCHEOLOGY ROAD');
199 | INSERT INTO Video VALUES ('T-REX, DEADLY KING', 1992, 'V1TR92', 'USED', 'A', 10, 50, 'ARCHEOLOGY ROAD');
200 | INSERT INTO Video VALUES ('ANCESTORS OF THE HUMANITY', 1998, 'V1AN98', 'BAD', 'A', 3, 15, 'ARCHEOLOGY ROAD');
201 | INSERT INTO Video VALUES ('PHYSICS, MOST BORING SH*T', 2018, 'V1PH18', 'NEW', 'A', 1, 5, 'PHYSICS ROAD');
202 |
203 | INSERT INTO Rent VALUES (101, 'B2A123', '10-05-2018', '20-05-2018');
204 | INSERT INTO Rent VALUES (102, 'B1Z123', '10-05-2018', '25-05-2018');
205 | INSERT INTO Rent VALUES (104, 'V1JA15', '01-05-2018', '21-05-2018');
206 | INSERT INTO Rent VALUES (105, 'V1DI00', '02-05-2018', '25-05-2018');
207 | INSERT INTO Rent VALUES (154, 'B1L321', '04-05-2018', '26-05-2018');
208 | INSERT INTO Rent VALUES (155, 'V1CH16', '29-04-2018', '29-05-2018');
209 |
210 |
211 | --FUNCTIONS--
212 | --1--
213 | --CUSTOMER--
214 | CREATE OR REPLACE PROCEDURE loginCustomer_library(user IN VARCHAR2, pass IN VARCHAR2)
215 | IS
216 | passAux customer.password%TYPE;
217 | incorrect_password EXCEPTION;
218 | BEGIN
219 |
220 |
221 | SELECT password INTO passAux
222 | FROM customer
223 | WHERE username LIKE user;
224 |
225 | IF passAux LIKE pass THEN
226 | DBMS_OUTPUT.PUT_LINE('User ' || user || ' loging succesfull');
227 | ELSE
228 | RAISE incorrect_password;
229 | END IF;
230 |
231 | EXCEPTION
232 | WHEN no_data_found OR incorrect_password THEN
233 | DBMS_OUTPUT.PUT_LINE('Incorrect username or password');
234 |
235 | END;
236 |
237 | SET SERVEROUTPUT ON;
238 | DECLARE
239 | user customer.username%TYPE;
240 | pass customer.password%TYPE;
241 | BEGIN
242 | user := &Username;
243 | pass := &Password;
244 | login_library(user,pass);
245 | END;
246 |
247 |
248 | --EMPLOYEE-
249 | CREATE OR REPLACE PROCEDURE loginEmployee_library(user IN VARCHAR2, pass IN VARCHAR2)
250 | IS
251 | passAux employee.password%TYPE;
252 | incorrect_password EXCEPTION;
253 | BEGIN
254 | SELECT password INTO passAux
255 | FROM employee
256 | WHERE username LIKE user;
257 |
258 | IF passAux LIKE pass THEN
259 | DBMS_OUTPUT.PUT_LINE('User ' || user || ' loging succesfull');
260 | ELSE
261 | RAISE incorrect_password;
262 | END IF;
263 |
264 | EXCEPTION
265 | WHEN no_data_found OR incorrect_password THEN
266 | DBMS_OUTPUT.PUT_LINE('Incorrect username or password');
267 | END;
268 |
269 | SET SERVEROUTPUT ON;
270 | DECLARE
271 | user employee.username%TYPE;
272 | pass employee.password%TYPE;
273 | BEGIN
274 | user := &Username;
275 | pass := &Password;
276 | login_employee_library(user,pass);
277 | END;
278 |
279 |
280 |
281 | --2--
282 | CREATE OR REPLACE PROCEDURE viewItem_library(auxItemID IN VARCHAR2)
283 | IS
284 | auxISBN VARCHAR2(4);
285 | auxTitle VARCHAR2(50);
286 | auxYear NUMBER;
287 | auxState VARCHAR2(10);
288 | auxDebyCost NUMBER(10,2);
289 | auxLostCost NUMBER(10,2);
290 | auxAddress VARCHAR2(50);
291 | auxAbala VARCHAR2(1);
292 | auxVideo NUMBER;
293 | auxBook NUMBER;
294 | BEGIN
295 |
296 | SELECT COUNT(*) INTO auxBook
297 | FROM book
298 | WHERE bookid LIKE auxItemID;
299 |
300 | SELECT COUNT(*) INTO auxVideo
301 | FROM video
302 | WHERE videoid LIKE auxItemID;
303 |
304 | IF auxBook > 0 THEN
305 | SELECT isbn, state, avalability, debycost, lostcost, address
306 | INTO auxISBN, auxState, auxAbala, auxDebyCost, auxLostCost, auxAddress
307 | FROM book
308 | WHERE bookid LIKE auxItemID;
309 |
310 | DBMS_OUTPUT.PUT_LINE('BOOK ' || auxItemID || ' INFO');
311 | DBMS_OUTPUT.PUT_LINE('------------------------------------------');
312 | DBMS_OUTPUT.PUT_LINE('ISBN: ' || auxISBN);
313 | DBMS_OUTPUT.PUT_LINE('STATE: ' || auxState);
314 | DBMS_OUTPUT.PUT_LINE('AVALABILITY: ' || auxAbala);
315 | DBMS_OUTPUT.PUT_LINE('DEBY COST: ' || auxDebyCost);
316 | DBMS_OUTPUT.PUT_LINE('LOST COST: ' || auxLostCost);
317 | DBMS_OUTPUT.PUT_LINE('ADDRESS: ' || auxAddress);
318 | DBMS_OUTPUT.PUT_LINE('------------------------------------------');
319 | ELSIF auxVideo > 0 THEN
320 | SELECT title, year, state, avalability, debycost, lostcost, address
321 | INTO auxTitle, auxYear, auxState, auxAbala, auxDebyCost, auxLostCost, auxAddress
322 | FROM video
323 | WHERE videoid LIKE auxItemID;
324 |
325 | DBMS_OUTPUT.PUT_LINE('VIDEO ' || auxItemID || ' INFO');
326 | DBMS_OUTPUT.PUT_LINE('------------------------------------------');
327 | DBMS_OUTPUT.PUT_LINE('TITLE: ' || auxTitle);
328 | DBMS_OUTPUT.PUT_LINE('YEAR: ' || auxYear);
329 | DBMS_OUTPUT.PUT_LINE('STATE: ' || auxState);
330 | DBMS_OUTPUT.PUT_LINE('AVALABILITY: ' || auxAbala);
331 | DBMS_OUTPUT.PUT_LINE('DEBY COST: ' || auxDebyCost);
332 | DBMS_OUTPUT.PUT_LINE('LOST COST: ' || auxLostCost);
333 | DBMS_OUTPUT.PUT_LINE('ADDRESS: ' || auxAddress);
334 | DBMS_OUTPUT.PUT_LINE('------------------------------------------');
335 | END IF;
336 | END;
337 |
338 | SET SERVEROUTPUT ON;
339 | DECLARE
340 | auxItemID VARCHAR2(10);
341 | BEGIN
342 | auxItemID := &Item_ID;
343 | viewItem_library(auxItemID);
344 | END;
345 |
346 |
347 |
348 | --3--
349 | --CUSTOMER--
350 | CREATE OR REPLACE PROCEDURE customerAccount_library(custoID IN customer.customerid%TYPE)
351 | IS
352 | auxCard NUMBER;
353 | auxFines NUMBER;
354 | auxItem VARCHAR(6);
355 | rented number := 0;
356 | BEGIN
357 | SELECT cardnumber INTO auxCard
358 | FROM customer
359 | WHERE customerid LIKE custoID;
360 |
361 | SELECT COUNT(*) INTO rented
362 | FROM rent
363 | WHERE rent.cardid LIKE auxcard;
364 |
365 | DBMS_OUTPUT.PUT_LINE('The user card is ' || auxCard);
366 | IF (rented > 0) THEN
367 | SELECT rent.itemid INTO auxItem
368 | FROM rent,card
369 | WHERE card.cardid = rent.cardid
370 | AND card.cardid LIKE auxCard;
371 |
372 | DBMS_OUTPUT.PUT_LINE('The user has ' || auxItem || ' rented');
373 | ELSE
374 | DBMS_OUTPUT.PUT_LINE('This user has no rents');
375 | END IF;
376 |
377 | SELECT fines INTO auxFines
378 | FROM card
379 | WHERE cardid LIKE auxcard;
380 |
381 | DBMS_OUTPUT.PUT_LINE('The user fines are ' || auxFines);
382 |
383 | EXCEPTION WHEN no_data_found THEN
384 | DBMS_OUTPUT.PUT_LINE('NOT DATA FOUND');
385 | END;
386 |
387 | SET SERVEROUTPUT ON;
388 | DECLARE
389 | custoID customer.customerid%TYPE;
390 | BEGIN
391 | custoID := &Customer_ID;
392 | customerAcount_library(custoID);
393 | END;
394 |
395 |
396 | --EMPLOYEE--
397 | CREATE OR REPLACE PROCEDURE employeeAccount_library(emploID IN employee.employeeid%TYPE)
398 | IS
399 | auxCard NUMBER;
400 | auxFines NUMBER;
401 | auxItem VARCHAR(6);
402 | rented number := 0;
403 | BEGIN
404 | SELECT cardnumber INTO auxCard
405 | FROM employee
406 | WHERE employeeid LIKE emploID;
407 |
408 | SELECT COUNT(*) INTO rented
409 | FROM rent
410 | WHERE rent.cardid LIKE auxcard;
411 |
412 | DBMS_OUTPUT.PUT_LINE('The user card is ' || auxCard);
413 | IF (rented > 0) THEN
414 | SELECT rent.itemid INTO auxItem
415 | FROM rent,card
416 | WHERE card.cardid = rent.cardid
417 | AND card.cardid LIKE auxCard;
418 |
419 | DBMS_OUTPUT.PUT_LINE('The user has ' || auxItem || ' rented');
420 | ELSE
421 | DBMS_OUTPUT.PUT_LINE('This user has no rents');
422 | END IF;
423 |
424 | SELECT fines INTO auxFines
425 | FROM card
426 | WHERE cardid LIKE auxcard;
427 |
428 | DBMS_OUTPUT.PUT_LINE('The user fines are ' || auxFines);
429 |
430 | EXCEPTION WHEN no_data_found THEN
431 | DBMS_OUTPUT.PUT_LINE('NOT DATA FOUND');
432 | END;
433 |
434 | SET SERVEROUTPUT ON;
435 | DECLARE
436 | emploID employee.employeeid%TYPE;
437 | BEGIN
438 | emploID := &Employee_ID;
439 | employeeAcount_library(emploID);
440 | END;
441 |
442 |
443 |
444 | --4--
445 | CREATE OR REPLACE PROCEDURE rentItem_library(auxCard IN NUMBER, auxItemID IN VARCHAR2, itemType IN VARCHAR2, auxDate IN DATE)
446 | IS
447 | statusAux VARCHAR2(1);
448 | itemStatus VARCHAR2(1);
449 | BEGIN
450 |
451 | SELECT status INTO statusAux
452 | FROM card
453 | WHERE cardid LIKE auxCard;
454 |
455 | IF statusAux LIKE 'A' THEN
456 | IF itemType LIKE 'book' THEN
457 | SELECT avalability INTO itemStatus
458 | FROM book
459 | WHERE bookid LIKE auxItemID;
460 |
461 | IF itemStatus LIKE 'A' THEN
462 | UPDATE book
463 | SET avalability = 'O'
464 | WHERE bookid LIKE auxItemID;
465 |
466 | INSERT INTO rent
467 | VALUES (auxCard,auxItemID,sysdate,auxDate);
468 | DBMS_OUTPUT.PUT_LINE('Item ' || auxItemID || ' rented');
469 | ELSE
470 | DBMS_OUTPUT.PUT_LINE('The item is already rented')
471 | END IF;
472 |
473 | ELSIF itemType LIKE 'video' THEN
474 |
475 | SELECT avalability INTO itemStatus
476 | FROM video
477 | WHERE videoid LIKE auxItemID;
478 |
479 | IF itemStatus LIKE 'A' THEN
480 | UPDATE video
481 | SET avalability = 'O'
482 | WHERE videoid LIKE auxItemID;
483 |
484 | INSERT INTO rent
485 | VALUES (auxCard,auxItemID,sysdate,auxDate);
486 | DBMS_OUTPUT.PUT_LINE('Item ' || auxItemID || ' rented');
487 | ELSE
488 | DBMS_OUTPUT.PUT_LINE('The item is already rented')
489 | END IF;
490 |
491 | ELSE
492 | DBMS_OUTPUT.PUT_LINE('The user is blocked');
493 | END IF;
494 | END;
495 |
496 | SET SERVEROUTPUT ON;
497 | DECLARE
498 | auxCard NUMBER;
499 | auxItemID VARCHAR2(10);
500 | itemType VARCHAR2(20);
501 | auxDate DATE;
502 | BEGIN
503 | auxCard := &Card_ID;
504 | itemType := &Item_Type_book_or_video;
505 | auxItemID := &ID_Item;
506 | auxDate := &Return_date;
507 | rentItem_library(auxCard,auxItemID,itemType,auxDate);
508 | END;
509 |
510 | SELECT * FROM customer;
511 | SELECT * FROM rent;
512 | SELECT * FROM card;
513 |
514 |
515 |
516 | --5--
517 | CREATE OR REPLACE PROCEDURE payFines_library(auxCard IN card.cardid%TYPE, money IN NUMBER)
518 | IS
519 | finesAmount NUMBER;
520 | total NUMBER;
521 | BEGIN
522 | SELECT fines INTO finesAmount
523 | FROM card
524 | WHERE cardid LIKE auxCard;
525 |
526 | IF finesAmount < money THEN
527 | total := money - finesAmount;
528 | DBMS_OUTPUT.PUT_LINE('YOU PAY ALL YOUR FINES AND YOU HAVE ' || total || ' MONEY BACK');
529 |
530 | UPDATE card
531 | SET status = 'A', fines = 0
532 | WHERE cardid = auxCard;
533 |
534 | ELSIF finesAmount = money THEN
535 | total := money - finesAmount;
536 | DBMS_OUTPUT.PUT_LINE('YOU PAY ALL YOUR FINES');
537 |
538 | UPDATE card
539 | SET status = 'A', fines = 0
540 | WHERE cardid = auxCard;
541 |
542 | ELSE
543 | total := finesAmount - money;
544 | DBMS_OUTPUT.PUT_LINE('YOU WILL NEED TO PAY ' || total || ' MORE DOLLARS TO UNLOCK YOUR CARD');
545 |
546 | UPDATE card
547 | SET fines = total
548 | WHERE cardid = auxCard;
549 | END IF;
550 | END;
551 |
552 | SET SERVEROUTPUT ON;
553 | DECLARE
554 | auxCard card.cardid%TYPE;
555 | money NUMBER;
556 | BEGIN
557 | auxCard := &Card_ID;
558 | money := &Money_To_Pay;
559 | payFines_library(custoID);
560 | END;
561 |
562 |
563 |
564 | --6--
565 | --CUSTOMER--
566 | CREATE OR REPLACE PROCEDURE updateInfoCusto_library(auxCustomer IN customer.customerid%TYPE, pNumber NUMBER, address VARCHAR2, newPass VARCHAR2)
567 | IS
568 | BEGIN
569 | UPDATE customer
570 | SET phone = pNumber, customeraddress = address, password = newPass
571 | WHERE customerid = auxCustomer;
572 | END;
573 |
574 | SET SERVEROUTPUT ON;
575 | DECLARE
576 | auxCustomer customer.customerid%TYPE;
577 | pNumber NUMBER;
578 | address VARCHAR2;
579 | newPass VARCHAR2;
580 | BEGIN
581 | auxCustomer := &Customer_ID;
582 | pNumber := &Write_your_new_phone_number_or_the_old_one_if_you_do_not_want_to_change_it;
583 | address := &Write_your_new_address_or_the_old_one_if_you_do_not_want_to_change_it;
584 | newPass := &Write_your_new_password_or_the_old_one_if_you_do_not_want_to_change_it;
585 | updateInfo_library(auxCustomer,pNumber,address,newPass);
586 | END;
587 |
588 | --EMPLOYEE--
589 | CREATE OR REPLACE PROCEDURE updateInfoEmp_library(auxEmployee IN employee.employeeid%TYPE, pNumber NUMBER, address VARCHAR2, newPass VARCHAR2, newPayCheck NUMBER,
590 | newBranch VARCHAR2)
591 | IS
592 | BEGIN
593 | UPDATE employee
594 | SET phone = pNumber, customeraddress = address, password = newPass, paycheck = auxEmployee, branchname = newBranch
595 | WHERE employeeid = auxEmployee;
596 | END;
597 |
598 | SET SERVEROUTPUT ON;
599 | DECLARE
600 | auxEmployee emplouee.employeeid%TYPE;
601 | pNumber NUMBER;
602 | address VARCHAR2;
603 | newPass VARCHAR2;
604 | newPayCheck NUMBER;
605 | newBranch VARCHAR2;
606 | BEGIN
607 | auxCustomer := &Customer_ID;
608 | pNumber := &Write_your_new_phone_number_or_the_old_one_if_you_do_not_want_to_change_it;
609 | address := &Write_your_new_address_or_the_old_one_if_you_do_not_want_to_change_it;
610 | newPass := &Write_your_new_password_or_the_old_one_if_you_do_not_want_to_change_it;
611 | newPayCheck := &Write_your_new_paycheck_or_the_old_one_if_you_do_not_want_to_change_it;
612 | newBranch := &Write_your_new_branch_or_the_old_one_if_you_do_not_want_to_change_it;
613 | updateInfoEmployee_library(auxCustomer,pNumber,address,newPass,newPayCheck,newBranch);
614 | END;
615 |
616 |
617 |
618 | --7--
619 | CREATE OR REPLACE PROCEDURE addCustomer_library(auxCustomerId IN NUMBER, auxName IN VARCHAR2, auxCustomerAddress IN VARCHAR2, auxPhone IN NUMBER,
620 | auxPass IN VARCHAR2, auxUserName IN VARCHAR2, auxCardNumber IN NUMBER)
621 | IS
622 | BEGIN
623 | INSERT INTO customer
624 | VALUES (auxCustomerId,auxName,auxCustomerAddress,auxPhone,auxPass,auxUserName,sysdate,auxCardNumber);
625 | END;
626 |
627 | SET SERVEROUTPUT ON;
628 | DECLARE
629 | auxCustomerId NUMBER;
630 | auxName VARCHAR2(20);
631 | auxCustomerAddress VARCHAR2(20);
632 | auxPhone NUMBER;
633 | auxPass VARCHAR2(20);
634 | auxUserName VARCHAR2(20);
635 | auxCardNumber NUMBER;
636 | BEGIN
637 | auxCustomerId := &Customer_ID;
638 | auxName := &Name;
639 | auxCustomerAddress := &Address;
640 | auxPhone := &Phone;
641 | auxPass := &Password;
642 | auxUserName := &User_Name;
643 | auxCardNumber := &Card_Numeber;
644 | addCustomer_library(auxCustomerId,auxName,auxCustomerAddress,auxPhone,auxPass,auxUserName,auxCardNumber);
645 | END;
646 |
647 |
648 |
649 | --8--
650 | --CUSTOMER--
651 | CREATE OR REPLACE TRIGGER addCardCusto_library
652 | AFTER INSERT
653 | ON customer
654 | FOR EACH ROW
655 | DECLARE
656 | BEGIN
657 | INSERT INTO card
658 | VALUES (:new.cardnumber,'A',0);
659 |
660 | DBMS_OUTPUT.PUT_LINE('Card created');
661 | END;
662 |
663 | --EMPLOYEE--
664 | CREATE OR REPLACE TRIGGER addCardEmp_library
665 | AFTER INSERT
666 | ON employee
667 | FOR EACH ROW
668 | DECLARE
669 | BEGIN
670 | INSERT INTO card
671 | VALUES (:new.cardnumber,'A',0);
672 |
673 | DBMS_OUTPUT.PUT_LINE('Card created');
674 | END;
675 |
676 | --EXAMPLE--
677 | INSERT INTO customer
678 | VALUES (11,'MARI CARMEN','CORDOBA',645892456,'maricarmen123','ma11',sysdate,111);
679 |
680 |
681 |
682 | --9--
683 | CREATE OR REPLACE PROCEDURE allMedia_library(mediaType VARCHAR2)
684 | IS
685 | CURSOR cBooks
686 | IS
687 | SELECT *
688 | FROM book;
689 |
690 | CURSOR cVideos
691 | IS
692 | SELECT *
693 | FROM video;
694 |
695 | xBooks cBooks%ROWTYPE;
696 | xVideos cVideos%ROWTYPE;
697 | BEGIN
698 | IF mediaType LIKE 'books' THEN
699 | OPEN cBooks;
700 |
701 | DBMS_OUTPUT.PUT_LINE('ISBN ID STATE AVALABILITY DEBY_COST LOST_COST LOCATION');
702 | DBMS_OUTPUT.PUT_LINE('-----------------------------------------------------------------------------');
703 |
704 | LOOP
705 | FETCH cBooks
706 | INTO xBooks;
707 | EXIT WHEN cBooks%NOTFOUND;
708 |
709 | DBMS_OUTPUT.PUT_LINE(xBooks.isbn || ' ' || xBooks.bookid || ' ' || xBooks.state || ' ' || xBooks.avalability || ' ' || xBooks.debycost || ' ' ||
710 | xBooks.lostcost || ' ' || xBooks.address);
711 | END LOOP;
712 | ELSIF mediaType LIKE 'videos' THEN
713 | OPEN cVideos;
714 | DBMS_OUTPUT.PUT_LINE('TITLE YEAR ID STATE AVALABILITY DEBY_COST LOST_COST LOCATION');
715 | DBMS_OUTPUT.PUT_LINE('---------------------------------------------------------------------------------------');
716 | LOOP
717 | FETCH cVideos
718 | INTO xVideos;
719 | EXIT WHEN cVideos%NOTFOUND;
720 |
721 | DBMS_OUTPUT.PUT_LINE(xVideos.title || ' ' || xVideos.year || ' ' || xVideos.videoid || ' ' || xVideos.state || ' ' || xVideos.avalability || ' ' || xVideos.debycost || ' ' ||
722 | xVideos.lostcost || ' ' || xVideos.address);
723 | END LOOP;
724 | ELSE
725 | DBMS_OUTPUT.PUT_LINE('TYPE INCORRECT, you must choose between books or videos');
726 | END IF;
727 | END;
728 |
729 | SET SERVEROUTPUT ON;
730 | DECLARE
731 | typeItem VARCHAR2(10);
732 | BEGIN
733 | typeItem := &Select_between_books_or_videos;
734 | allMedia_library(typeItem);
735 | END;
736 |
737 |
738 |
739 | --10--
740 | CREATE OR REPLACE PROCEDURE handleReturns_library(auxItemID IN VARCHAR2)
741 | IS
742 | auxRented NUMBER;
743 | auxBook NUMBER;
744 | auxVideo NUMBER;
745 | BEGIN
746 | SELECT COUNT(*) INTO auxRented
747 | FROM rent
748 | WHERE itemid LIKE auxItemID;
749 |
750 | SELECT COUNT(*) INTO auxBook
751 | FROM book
752 | WHERE bookid LIKE auxItemID;
753 |
754 | SELECT COUNT(*) INTO auxVideo
755 | FROM video
756 | WHERE videoid LIKE auxItemID;
757 |
758 | IF auxRented > 0 THEN
759 | DELETE FROM rent
760 | WHERE itemid = auxItemID;
761 | IF auxBook > 0 THEN
762 | UPDATE book
763 | SET avalability = 'A'
764 | WHERE bookid LIKE auxItemID;
765 | DBMS_OUTPUT.PUT_LINE('The book ' || auxItemID || ' is now avaible.');
766 | ELSIF auxVideo > 0 THEN
767 | UPDATE video
768 | SET avalability = 'A'
769 | WHERE videoid LIKE auxItemID;
770 | DBMS_OUTPUT.PUT_LINE('The video ' || auxItemID || ' is now avaible.');
771 | END IF;
772 | ELSE
773 | DBMS_OUTPUT.PUT_LINE('This item is not rented at the moment');
774 | END IF;
775 | EXCEPTION WHEN no_data_found THEN
776 | DBMS_OUTPUT.PUT_LINE('Item ID incorrect');
777 | END;
778 |
779 | SET SERVEROUTPUT ON;
780 | DECLARE
781 | auxItemID VARCHAR2(10);
782 | BEGIN
783 | auxItemID := &ItemID_to_return;
784 | handleReturns_library(auxItemID);
785 | END;
786 |
787 | SELECT * FROM rent;
788 | SELECT * FROM book;
789 |
790 |
791 | --11--
792 | CREATE OR REPLACE TRIGGER modifyFines_library
793 | AFTER DELETE
794 | ON rent
795 | FOR EACH ROW
796 | DECLARE
797 | auxCardID NUMBER;
798 | auxItemID VARCHAR2(6);
799 | auxBook NUMBER;
800 | auxVideo NUMBER;
801 | auxDeby NUMBER;
802 | BEGIN
803 | SELECT cardid, itemid INTO auxCardID, auxItemID
804 | FROM rent
805 | WHERE cardid LIKE :old.cardid;
806 |
807 | SELECT COUNT(*) INTO auxBook
808 | FROM book
809 | WHERE bookid LIKE auxItemID;
810 |
811 | SELECT COUNT(*) INTO auxVideo
812 | FROM video
813 | WHERE videoid LIKE auxItemID;
814 |
815 | IF sysdate > :old.returndate THEN
816 | IF auxVideo > 0 THEN
817 | SELECT debyCost INTO auxDeby
818 | FROM video
819 | WHERE videoid LIKE auxItemID;
820 | ELSIF auxBook > 0 THEN
821 | SELECT debyCost INTO auxDeby
822 | FROM book
823 | WHERE bookid LIKE auxItemID;
824 | END IF;
825 |
826 | UPDATE card
827 | SET status = 'B', fines = (fines + auxDeby)
828 | WHERE cardid LIKE auxCardID;
829 | ELSE
830 | DBMS_OUTPUT.PUT_LINE('The item has been return before deadline');
831 | END IF;
832 | END;
833 | --EXAMPLE--
834 | INSERT INTO customer
835 | VALUES (12,'ALEJANDRO','ZAIDIN',629629629,'alex123','al12',sysdate,112);
836 |
837 | SELECT * FROM rent;
838 |
839 | SET SERVEROUTPUT ON;
840 | DECLARE
841 | auxCard NUMBER;
842 | auxItemID VARCHAR2(10);
843 | itemType VARCHAR2(20);
844 | auxDate DATE;
845 | BEGIN
846 | auxCard := &Card_ID;
847 | itemType := &Item_Type_book_or_video;
848 | auxItemID := &ID_Item;
849 | auxDate := &Return_date;
850 | rentItem_library(auxCard,auxItemID,itemType,auxDate);
851 | END;
852 |
853 | SELECT * FROM rent;
854 |
855 | SET SERVEROUTPUT ON;
856 | DECLARE
857 | auxItemID VARCHAR2(10);
858 | BEGIN
859 | auxItemID := &ItemID_to_return;
860 | handleReturns_library(auxItemID);
861 | END;
862 |
863 | DELETE FROM card WHERE cardid LIKE 112;
864 | SELECT * FROM card;
865 |
866 |
867 |
868 | --12--
869 | --BOOK--
870 | CREATE OR REPLACE PROCEDURE addBook_library(auxISBN IN VARCHAR2, auxBookID IN VARCHAR2, auxState IN VARCHAR2, auxDebyCost IN NUMBER,
871 | auxLostCost IN NUMBER, auxAddress IN VARCHAR2)
872 | IS
873 | BEGIN
874 | INSERT INTO book
875 | VALUES(auxISBN,auxBookID,auxState,'A',auxDebyCost,auxLostCost,auxAddress);
876 | DBMS_OUTPUT.PUT_LINE('Book inserted correctly');
877 | END;
878 |
879 | --VIDEO--
880 | CREATE OR REPLACE PROCEDURE addVideo_library(auxTitle IN VARCHAR2, auxYear IN INT, auxVideoID IN VARCHAR2, auxState IN VARCHAR2, auxDebyCost IN NUMBER,
881 | auxLostCost IN NUMBER, auxAddress IN VARCHAR2)
882 | IS
883 | BEGIN
884 | INSERT INTO video
885 | VALUES(auxTitle,auxYear,auxVideoID,auxState,'A',auxDebyCost,auxLostCost,auxAddress);
886 | DBMS_OUTPUT.PUT_LINE('Video inserted correctly');
887 | END;
888 |
889 | --EXAMPLES--
890 | SET SERVEROUTPUT ON;
891 | DECLARE
892 | auxISBN VARCHAR2(4);
893 | auxItemID VARCHAR2(6);
894 | auxState VARCHAR2(10);
895 | auxDebyCost NUMBER(10,2);
896 | auxLostCost NUMBER(10,2);
897 | auxAddress VARCHAR2(50);
898 | BEGIN
899 | auxISBN := &ISBN;
900 | auxItemID := &ItemID;
901 | auxState := &State;
902 | auxDebyCost := &Deby_Cost;
903 | auxLostCost := &Lost_Cost;
904 | auxAddress := &Location;
905 | addBook_library(auxISBN, auxItemID, auxState, auxDebyCost, auxLostCost, auxAddress);
906 | END;
907 |
908 | SELECT * FROM book;
909 |
910 | SET SERVEROUTPUT ON;
911 | DECLARE
912 | auxTitle VARCHAR2(50);
913 | auxYear INT;
914 | auxItemID VARCHAR2(6);
915 | auxState VARCHAR2(10);
916 | auxDebyCost NUMBER(10,2);
917 | auxLostCost NUMBER(10,2);
918 | auxAddress VARCHAR2(50);
919 | BEGIN
920 | auxTitle := &Title;
921 | auxYear := &Year;
922 | auxItemID := &ItemID;
923 | auxState := &State;
924 | auxDebyCost := &Deby_Cost;
925 | auxLostCost := &Lost_Cost;
926 | auxAddress := &Location;
927 | addVideo_library(auxTitle, auxYear, auxItemID, auxState, auxDebyCost, auxLostCost, auxAddress);
928 | END;
929 |
930 | SELECT * FROM video;
931 |
932 |
933 |
934 | --13--
935 | CREATE OR REPLACE PROCEDURE removeItem_library(auxItemID IN VARCHAR2)
936 | IS
937 | auxBook NUMBER;
938 | auxVideo NUMBER;
939 | BEGIN
940 | SELECT COUNT(*) INTO auxBook
941 | FROM book
942 | WHERE bookid LIKE auxItemID;
943 |
944 | SELECT COUNT(*) INTO auxVideo
945 | FROM video
946 | WHERE videoid LIKE auxItemID;
947 |
948 | IF auxBook > 0 THEN
949 | DELETE FROM book
950 | WHERE bookid LIKE auxItemID;
951 | DBMS_OUTPUT.PUT_LINE('Book removed correctly');
952 | ELSIF auxVideo > 0 THEN
953 | DELETE FROM video
954 | WHERE videoid LIKE auxItemID;
955 | DBMS_OUTPUT.PUT_LINE('Video removed correctly');
956 | END IF;
957 | END;
958 |
959 | SET SERVEROUTPUT ON;
960 | DECLARE
961 | auxItemID VARCHAR2(10);
962 | BEGIN
963 | auxItemID := &ItemID_to_remove;
964 | removeItem_library(auxItemID);
965 | END;
966 |
967 |
968 |
969 | --14--
970 | --The statement indicates the creation of another function, but we have made function five meet both needs--
971 |
972 |
973 | --14--
974 | CREATE OR REPLACE PROCEDURE viewCustomer_library(auxCustomerID IN NUMBER)
975 | IS
976 | custoName VARCHAR2(40);
977 | custoAdd VARCHAR2(50);
978 | custoPhone NUMBER(9);
979 | userNaM VARCHAR2(10);
980 | custoDate DATE;
981 | custoCard NUMBER;
982 | BEGIN
983 | SELECT name,customeraddress,phone,username,datesignup,cardnumber
984 | INTO custoName, custoAdd, custoPhone, userNaM, custoDate, custoCard
985 | FROM customer
986 | WHERE customerid LIKE auxCustomerID;
987 |
988 | DBMS_OUTPUT.PUT_LINE('CUSTOMER ' || auxCustomerID || ' INFO');
989 | DBMS_OUTPUT.PUT_LINE('------------------------------------------');
990 | DBMS_OUTPUT.PUT_LINE('NAME: ' || custoName);
991 | DBMS_OUTPUT.PUT_LINE('ADDRESS: ' || custoAdd);
992 | DBMS_OUTPUT.PUT_LINE('PHONE: ' || custoPhone);
993 | DBMS_OUTPUT.PUT_LINE('USER NAME: ' || userNaM);
994 | DBMS_OUTPUT.PUT_LINE('DATE OF SIGN UP: ' || custoDate);
995 | DBMS_OUTPUT.PUT_LINE('CARD NUMBER: ' || custoCard);
996 | DBMS_OUTPUT.PUT_LINE('------------------------------------------');
997 |
998 | END;
999 |
1000 | SET SERVEROUTPUT ON;
1001 | DECLARE
1002 | auxCustoID VARCHAR2(10);
1003 | BEGIN
1004 | auxCustoID := &CustomerID;
1005 | viewCustomer_library(auxCustoID);
1006 | END;
1007 |
1008 |
1009 |
1010 | --OBJECT--
1011 | CREATE OR REPLACE TYPE director_library AS OBJECT(
1012 | employeeid NUMBER,
1013 | name VARCHAR2(40),
1014 | address VARCHAR2(50),
1015 | phone INT(9),
1016 | paycheck NUMBER(10,2),
1017 | extrapaycheck NUMBER(10,2)
1018 | );
1019 |
1020 | SET SERVEROUTPUT ON;
1021 | DECLARE
1022 | director director_library;
1023 | BEGIN
1024 | director := director_library('212', 'CHANDLER', 'OUR HEARTHS', 688688688,1150.5,500);
1025 | dbms_output.put_line('DIRECTOR ID: '|| director.employeeid);
1026 | dbms_output.put_line('--------------------------------------------' );
1027 | dbms_output.put_line('NAME: '|| director.name);
1028 | dbms_output.put_line('ADDRESS: '|| director.address);
1029 | dbms_output.put_line('PHONE: '|| director.phone);
1030 | dbms_output.put_line('PAYCHECK: '|| director.paycheck);
1031 | dbms_output.put_line('EXTRA: '|| director.extrapaycheck);
1032 | dbms_output.put_line('--------------------------------------------' );
1033 | END;
1034 |
--------------------------------------------------------------------------------
/Library.xml:
--------------------------------------------------------------------------------
1 |
5 |
6 |