Advertisement
Guest User

Untitled

a guest
Jan 28th, 2020
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.51 KB | None | 0 0
  1. CREATE OR REPLACE PROCEDURE generuj_dane
  2. AUTHID CURRENT_USER AS
  3. data_start DATE := TO_DATE('2004-01-01');
  4. data_stop DATE := TO_DATE('2020-01-20');
  5. data_temp DATE := nast_sroda(start_date);
  6. insert_date DATE;
  7. average_mouses NUMBER;
  8. myszy_created NUMBER := 1;
  9. myszy_assigned NUMBER := 1;
  10.  
  11. TYPE myszy_table IS TABLE OF myszy%rowtype INDEX BY BINARY_INTEGER;
  12. myszy_dodane myszy_table;
  13.  
  14. TYPE kot_myszy IS RECORD (pseudo Kocury.pseudo%TYPE, myszy NUMBER);
  15. TYPE koty_table IS TABLE OF kot_myszy INDEX BY BINARY_INTEGER;
  16. koty koty_table;
  17.  
  18. BEGIN
  19. WHILE start_date < ending_date LOOP
  20. SELECT AVG(przydzial_myszy + NVL(myszy_extra,0)) INTO average_mouses FROM kocury WHERE w_stadku_od <= start_date;
  21. SELECT pseudo, przydzial_myszy + NVL(myszy_extra,0) BULK COLLECT INTO koty FROM kocury WHERE w_stadku_od <= start_date;
  22. -- PRZYDZIAL MYSZY DO TABELI - kazdy kot upolowal srednia
  23. FOR i IN 1..koty.count LOOP
  24. FOR j IN 1..average_mouses LOOP
  25. insert_date := start_date + DBMS_RANDOM.VALUE(0, TRUNC(last_wed) - TRUNC(start_date));
  26. IF (insert_date < ending_date) THEN
  27. myszy_dodane(myszy_created).nr_myszy := myszy_created;
  28. myszy_dodane(myszy_created).lowca := koty(i).pseudo;
  29. myszy_dodane(myszy_created).waga_myszy := DBMS_RANDOM.VALUE(2,10);
  30. myszy_dodane(myszy_created).data_zlowienia := insert_date;
  31. myszy_created := myszy_created + 1;
  32. END IF;
  33. END LOOP;
  34. END LOOP;
  35.  
  36. -- wydajemy myszy, kazdy kocur tyle ile ma przydzielone
  37. IF (last_wed < ending_date) THEN
  38. FOR i IN 1..koty.COUNT LOOP
  39. FOR j IN 1..koty(i).myszy LOOP
  40. IF (myszy_created > myszy_assigned) THEN
  41. myszy_dodane(myszy_assigned).zjadacz := koty(i).pseudo;
  42. myszy_dodane(myszy_assigned).data_wydania := last_wed;
  43. myszy_assigned := myszy_assigned + 1;
  44. END IF;
  45. END LOOP;
  46. END LOOP;
  47.  
  48. WHILE myszy_assigned < myszy_created LOOP
  49. myszy_dodane(myszy_assigned).zjadacz := 'TYGRYS';
  50. myszy_dodane(myszy_assigned).data_wydania := last_wed;
  51. myszy_assigned := myszy_assigned + 1;
  52. END LOOP;
  53. END IF;
  54. -- CHECK: sprawdzenie czy wydane zostały wszystkie myszy.
  55. -- DBMS_OUTPUT.PUT_LINE('Nowych myszy: ' || myszy_created || ' Myszy wydanych: ' || myszy_assigned);
  56. -- ustalamy nowy przedzial
  57. start_date := last_wed + 1;
  58. IF(EXTRACT(MONTH FROM start_date) = EXTRACT(MONTH FROM last_wed)) THEN
  59. last_wed := get_last_wed(ADD_MONTHS(start_date,1));
  60. ELSE
  61. last_wed := get_last_wed(start_date);
  62. END IF;
  63. END LOOP;
  64. FORALL i IN 1..myszy_dodane.COUNT SAVE EXCEPTIONS
  65. INSERT INTO myszy VALUES (myszy_dodane(i).nr_myszy,myszy_dodane(i).lowca,myszy_dodane(i).zjadacz,myszy_dodane(i).waga_myszy,
  66. myszy_dodane(i).data_zlowienia,myszy_dodane(i).data_wydania);
  67. EXCEPTION
  68. WHEN others THEN DBMS_OUTPUT.PUT_LINE(SQLERRM);
  69. myszy_created:=SQL%BULK_EXCEPTIONS.COUNT;
  70. FOR i IN 1..myszy_created
  71. LOOP
  72. DBMS_OUTPUT.PUT_LINE('Blad '||i||': myszka '||
  73. SQL%BULK_EXCEPTIONS(i).error_index||' - '||
  74. SQLERRM(-SQL%BULK_EXCEPTIONS(i).error_code));
  75. END LOOP;
  76. END;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement