Advertisement
Guest User

Untitled

a guest
Feb 21st, 2018
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.51 KB | None | 0 0
  1. -- Create table (Task 1/a)
  2. CREATE TABLE X (
  3. id NUMBER,
  4. nazwa VARCHAR2(30),
  5. data DATE
  6. );
  7.  
  8. -- Create sequenece (Task 1/b)
  9. CREATE SEQUENCE sek_X;
  10.  
  11. -- pl/sql block (Task 2)
  12. -- || stands for concat
  13. -- We can access sequence only inside block (between BEGIN and END)
  14. BEGIN
  15. FOR i IN 1..100 LOOP
  16. INSERT INTO X VALUES (sek_X.NEXTVAL, 'NAZWA' || sek_X.CURRVAL, SYSDATE);
  17. END LOOP;
  18. END;
  19.  
  20. -- Sum of sold for all titles - not using pq/sql but not perfect
  21. SELECT * FROM
  22. (
  23. SELECT B.TITLE, SUM(OI.QUANTITY)
  24. FROM BOOKS B, ORDERITEMS OI
  25. WHERE B.ISBN = OI.ISBN
  26. GROUP BY B.TITLE
  27. ORDER BY SUM(OI.QUANTITY) desc
  28. )
  29. WHERE ROWNUM <= 3;
  30.  
  31. -- ???
  32. SELECT B.TITLE, SUM(OI.QUANTITY)
  33. FROM BOOKS B, ORDERITEMS OI
  34. WHERE B.ISBN = OI.ISBN
  35. GROUP BY B.TITLE
  36. ORDER BY SUM(OI.QUANTITY) desc;
  37.  
  38. -- Solution provided by teacher is do 3 times select with max while eleminating old results
  39. DECLARE
  40. CURSOR c_bestsellers IS
  41. SELECT B.TITLE as title, SUM(OI.QUANTITY) as overall, B.PUBDATE as pub
  42. FROM BOOKS B, ORDERITEMS OI
  43. WHERE B.ISBN = OI.ISBN
  44. GROUP BY B.TITLE, B.PUBDATE
  45. ORDER BY overall desc;
  46.  
  47. cnt NUMBER := 0;
  48. lastRecord NUMBER;
  49.  
  50. -- Wrong solution kinda
  51. BEGIN
  52. FOR i IN c_bestsellers LOOP
  53. IF lastRecord != null AND lastRecord != i.overall THEN
  54. cnt := cnt + 1;
  55. END IF;
  56.  
  57. EXIT WHEN cnt = 3;
  58.  
  59. INSERT INTO X VALUES (sek_X.NEXTVAL, i.title, i.pub);
  60.  
  61. lastRecord := i.overall;
  62. END LOOP;
  63. END;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement