Advertisement
Guest User

Untitled

a guest
Jan 21st, 2020
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.46 KB | None | 0 0
  1. DROP PROCEDURE IF EXISTS so984_testowa.UpdateBestsellers;
  2.  
  3. DELIMITER $$
  4.  
  5. CREATE PROCEDURE so984_testowa.UpdateBestsellers()
  6. BEGIN
  7. DECLARE BOOKSREAD, DAYS, BK_ID, RDR_ID INT;
  8. DECLARE BOOKSPERMONTH DECIMAL(5,2);
  9. DECLARE FINISHED INT DEFAULT 0;
  10. DECLARE ALL_READERS CURSOR FOR SELECT READER_ID FROM READERS;
  11. DECLARE ALL_BOOKS CURSOR FOR SELECT so984_testowa.BOOKS.BOOK_ID FROM so984_testowa.BOOKS;
  12. DECLARE CONTINUE HANDLER FOR NOT FOUND SET FINISHED = 1;
  13. OPEN ALL_BOOKS;
  14. OPEN ALL_READERS;
  15.  
  16. WHILE (FINISHED = 0) DO
  17. FETCH ALL_BOOKS INTO BK_ID;
  18. FETCH ALL_READERS INTO RDR_ID;
  19. IF (FINISHED = 0) THEN
  20. SELECT COUNT(*) FROM so984_testowa.RENTS
  21. WHERE so984_testowa.RENTS.READER_ID = RDR_ID
  22. INTO BOOKSREAD;
  23.  
  24. SELECT DATEDIFF(MAX(so984_testowa.RENTS.RENT_DATE), MIN(so984_testowa.RENTS.RENT_DATE)) + 1 FROM so984_testowa.RENTS
  25. WHERE so984_testowa.RENTS.READER_ID = RDR_ID
  26. INTO DAYS;
  27. SET BOOKSPERMONTH = BOOKSREAD / DAYS * 30;
  28.  
  29. IF BOOKSPERMONTH > 2 THEN
  30. UPDATE so984_testowa.BOOKS SET BESTSELLER = TRUE
  31. WHERE BOOK_ID = BK_ID;
  32. ELSE
  33. UPDATE so984_testowa.BOOKS SET BESTSELLER = FALSE
  34. WHERE BOOK_ID = BK_ID;
  35. END IF;
  36. COMMIT;
  37. END IF;
  38. END WHILE;
  39.  
  40. SELECT BOOKSREAD, DAYS, BOOKSPERMONTH;
  41. END $$
  42.  
  43. DELIMITER ;
  44.  
  45. CALL so984_testowa.UpdateBestsellers();
  46.  
  47. SELECT * FROM so984_testowa.BOOKS;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement