Advertisement
Guest User

Untitled

a guest
Jun 18th, 2018
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PL/SQL 8.94 KB | None | 0 0
  1. -- Grupa 1
  2.  
  3. -- Pojebane zadanie 1
  4. CREATE OR REPLACE
  5. PROCEDURE zad1(
  6.     im IN UCZNIOWIE.IMIE%TYPE, nazw IN UCZNIOWIE.NAZWISKO%TYPE,
  7.     dataur IN UCZNIOWIE.DATA_UR%TYPE
  8. ) IS
  9.     iducz UCZNIOWIE.ID_UCZNIA%TYPE;
  10.  
  11.     CURSOR cur IS
  12.         SELECT ID_UCZNIA
  13.         FROM UCZNIOWIE
  14.         WHERE IMIE = im AND
  15.             NAZWISKO = nazw;
  16. BEGIN
  17.     INSERT INTO KLASY
  18.     VALUES (10, 'Vk', 10);
  19.  
  20.     OPEN cur;
  21.  
  22.     FETCH cur INTO iducz;
  23.  
  24.     IF cur%found THEN
  25.         DBMS_OUTPUT.PUT_LINE('Uczen znajduje sie w bazie');
  26.     ELSE
  27.         INSERT INTO UCZNIOWIE
  28.         VALUES (20, nazw, im, dataur, 10);
  29.     END IF;
  30.  
  31.     CLOSE cur;
  32.  
  33. EXCEPTION
  34.     WHEN OTHERS THEN
  35.         DBMS_OUTPUT.PUT_LINE('Blad: ' || SQLERRM)
  36. END;
  37.  
  38. -- Zadanie 2
  39.  
  40. CREATE OR REPLACE
  41. FUNCTION zad2(
  42.     przed_nazw OUT PRZEDMIOTY.NAZWA%TYPE, im OUT NAUCZYCIELE.IMIE%TYPE,
  43.     nazw OUT NAUCZYCIELE.NAZWISKO%TYPE
  44. ) RETURN NUMBER IS
  45.     srednia NUMBER;
  46. BEGIN
  47.     SELECT P.NAZWA, N.IMIE, N.NAZWISKO, AVG(O.OCENA)
  48.     INTO przed_nazw, im, nazw, srednia
  49.     FROM PRZEDMIOTY P, NAUCZYCIELE N, OCENY O
  50.     WHERE P.ID_PRZEDMIOTU = N.ID_PRZEDMIOTU AND
  51.         O.ID_PRZEDMIOTU = P.ID_PRZEDMIOTU AND
  52.         O.ID_NAUCZYCIELA = N.ID_NAUCZYCIELA
  53.     GROUP BY P.NAZWA, N.IMIE, N.NAZWISKO
  54.     ORDER BY AVG(O.OCENA) DESC
  55.     FETCH FIRST ROW ONLY;
  56.  
  57.     RETURN srednia;
  58. END;
  59.  
  60.  
  61. -- Zadanie 3 też pojebane
  62.  
  63. CREATE OR REPLACE
  64. PROCEDURE zad3(
  65.     im IN OUT NAUCZYCIELE.IMIE%TYPE, nazw IN OUT NAUCZYCIELE.NAZWISKO%TYPE,
  66.     srednia OUT NUMBER
  67. ) IS
  68. BEGIN
  69.     SELECT N.IMIE, N.NAZWISKO, AVG(O.OCENA)
  70.     INTO im, nazw, srednia
  71.     FROM NAUCZYCIELE N, OCENA O, KLASY K
  72.     WHERE K.ID_NAUCZYCIELA = N.ID_NAUCZYCIELA AND
  73.         O.ID_NAUCZYCIELA = N.ID_NAUCZYCIELA
  74.     GROUP BY N.IMIE, N.NAZWISKO;
  75. END;
  76.  
  77. -- Zadanie 4
  78.  
  79. CREATE OR REPLACE
  80. TRIGGER zad4
  81. BEFORE UPDATE OR INSERT ON UCZNIOWIE
  82. FOR EACH ROW
  83. BEGIN
  84.     IF UPDATING THEN
  85.         INSERT INTO TEST
  86.         VALUES ('UPDATE ' || :OLD.IMIE || ' ' :NEW.IMIE);
  87.     ELSE IF INSERTING THEN
  88.         INSERT INTO TEST
  89.         VALUES ('INSERT ' || :NEW.IMIE);
  90.     END IF;
  91. END;
  92.  
  93. -- Zadanie 5
  94.  
  95. CREATE OR REPLACE
  96. PACKAGE zad5
  97. IS
  98.     PROCEDURE zad1(
  99.         im IN UCZNIOWIE.IMIE%TYPE, nazw IN UCZNIOWIE.NAZWISKO%TYPE,
  100.         dataur IN UCZNIOWIE.DATA_UR%TYPE);
  101.  
  102.     FUNCTION zad2(
  103.         przed_nazw OUT PRZEDMIOTY.NAZWA%TYPE, im OUT NAUCZYCIELE.IMIE%TYPE,
  104.         nazw OUT NAUCZYCIELE.NAZWISKO%TYPE
  105.     ) RETURN NUMBER;
  106.  
  107.     PROCEDURE zad3(
  108.         im IN OUT NAUCZYCIELE.IMIE%TYPE, nazw IN OUT NAUCZYCIELE.NAZWISKO%TYPE,
  109.         srednia OUT NUMBER);
  110. END;
  111.  
  112. CREATE OR REPLACE PACKAGE BODY zad5
  113. IS
  114.     -- TO SAMO CO zad1 - zad3 tylko bez
  115.     -- CREATE OR REPLACE
  116. END;
  117.  
  118. -- Grupa 4
  119.  
  120. -- Zadanie 1
  121. CREATE OR REPLACE
  122. PROCEDURE zad1(
  123.     im IN CZYTELNICY.IMIE%TYPE, nazw IN CZYTELNICY.NAZWISKO%TYPE,
  124.     idksiazki IN WYPOZYCZENIA.ID_KSIAZKI%TYPE,
  125.     datawyp IN WYPOZYCZENIA.DATA_WYP%TYPE,
  126.     datazwr IN WYPOZYCZENIA.DATA_ZWR%TYPE
  127. ) IS
  128.     czyt CZYTELNICY.ID_CZYTELNIKA%TYPE;
  129.  
  130.     CURSOR cur IS
  131.         SELECT ID_CZYTELNIKA
  132.         FROM CZYTELNICY
  133.         WHERE IMIE = im AND
  134.             NAZWISKO = nazw;
  135. BEGIN
  136.     OPEN cur;
  137.  
  138.     FETCH cur INTO czyt;
  139.  
  140.     IF cur%notfound THEN
  141.         INSERT INTO CZYTELNICY
  142.         VALUES (10, nazw, imie, NULL, NULL, NULL, NULL, NULL, 0)
  143.         RETURNING INTO czyt;
  144.     END IF;
  145.  
  146.     CLOSE cur;
  147.  
  148.     INSERT INTO WYPOZYCZENIA
  149.     VALUES (10, czyt.id_czytelnika, idksiazki, datawyp, datazwr);
  150. EXCEPTION
  151.     WHEN OTHERS THEN
  152.         DBMS_OUTPUT.PUT_LINE('Błąd: ' || SQLERRM);
  153. END;
  154.  
  155. -- Zadanie 2
  156.  
  157. CREATE OR REPLACE
  158. FUNCTION zad2(
  159.     od IN WYPOZYCZENIA.DATA_WYP%TYPE,
  160.     DO IN WYPOZYCZENIA.DATA_ZWR%TYPE
  161. ) RETURN NUMBER IS
  162.     licznik NUMBER;
  163.     CURSOR cur IS
  164.         SELECT K.TYTUL, K.DATA_WYD
  165.         FROM KSIAZKI K, WYPOZYCZENIA W
  166.         WHERE K.ID_KSIAZKI = W.ID_KSIAZKI
  167.         GROUP BY K.ID_KSIAZKI
  168.         ORDER BY DATA_WYD DESC;
  169. BEGIN
  170.     FOR k IN cur LOOP
  171.         DBMS_OUTPUT.PUT_LINE(k.tytul);
  172.     END LOOP;
  173.  
  174.     SELECT COUNT(*)
  175.     INTO licznik
  176.     FROM KSIAZKI
  177.     WHERE DATA_WYD >= '2015-01-01';
  178.  
  179.     RETURN licznik;
  180. END;
  181.  
  182. -- Zadanie 3
  183.  
  184. CREATE OR REPLACE
  185. PROCEDURE zad3(
  186.     nazgat IN GATUNEK.NAZWA%TYPE, liczbaksiazek OUT NUMBER
  187. ) IS
  188.     CURSOR cur IS
  189.         SELECT A.IMIE, A.NAZWISKO, K.TYTUL, G.NAZWA
  190.         FROM GATUNEK G, KSIAZKI K, AUTORZY A
  191.         WHERE K.ID_GATUNEK = G.ID_GATUNEK AND
  192.             K.ID_AUTORA = A.ID_AUTORA AND
  193.             G.NAZWA = nazgat AND
  194.             K.DATA_WYD > DATEADD(YEAR, -1, SYSDATE)
  195.         ORDER BY A.NAZWISKO, A.IMIE;
  196. BEGIN
  197.     FOR k IN cur LOOP
  198.         DBMS_OUTPUT.PUT_LINE(A.IMIE || ' ' || A.NAZWISKO
  199.             || ' ' || K.TYTUL || ' ' || G.NAZWA);
  200.     END LOOP;
  201.  
  202.     SELECT COUNT(*)
  203.     INTO liczbaksiazek
  204.     FROM KSIAZKI K, GATUNEK G
  205.     WHERE K.ID_GATUNEK = G.ID_GATUNEK;
  206. END;
  207.  
  208. -- Zadanie 4
  209.  
  210. -- Chuj wie
  211.  
  212. -- Zadanie 5
  213.  
  214. CREATE OR REPLACE PACKAGE zad5
  215. IS
  216.     PROCEDURE zad1(
  217.         im IN CZYTELNICY.IMIE%TYPE, nazw IN CZYTELNICY.NAZWISKO%TYPE,
  218.         idksiazki IN WYPOZYCZENIA.ID_KSIAZKI%TYPE,
  219.         datawyp IN WYPOZYCZENIA.DATA_WYP%TYPE,
  220.         datazwr IN WYPOZYCZENIA.DATA_ZWR%TYPE
  221.     );
  222.  
  223.     FUNCTION zad2(
  224.         od IN WYPOZYCZENIA.DATA_WYP%TYPE, DO IN WYPOZYCZENIA.DATA_ZWR%TYPE
  225.     ) RETURN NUMBER;
  226.  
  227.     PROCEDURE zad3(nazgat IN GATUNEK.NAZWA%TYPE, liczbaksiazek OUT NUMBER);
  228. END;
  229.  
  230. CREATE OR REPLACE PACKAGE BODY zad5
  231. IS
  232.     -- TO SAMO CO zad1 - zad3 tylko bez
  233.     -- CREATE OR REPLACE
  234. END;
  235.  
  236. -- Grupa 5
  237.  
  238. -- Zadanie 1
  239.  
  240. CREATE OR REPLACE
  241. PROCEDURE zad1(
  242.     im IN PACJENCI.IMIE%TYPE, nazw IN PACJENCI.NAZWISKO%TYPE
  243. ) IS
  244.     id_pac PACJENCI.ID_PACJENTA%TYPE;
  245.  
  246.     CURSOR cur IS
  247.         SELECT ID_PACJENTA
  248.         FROM PACJENCI
  249.         WHERE IMIE = im AND
  250.             NAZWISKO = nazw;
  251. BEGIN
  252.     OPEN cur;
  253.     FETCH cur INTO id_pac;
  254.    
  255.     IF cur%notfound THEN
  256.         INSERT INTO PACJENCI
  257.         VALUES (seq_pacjenci.NEXTVAL, nazw, im, NULL, NULL, NULL, NULL, NULL)
  258.         RETURING ID_PACJENTA INTO id_pac;
  259.     END IF;
  260.  
  261.     CLOSE cur;
  262.  
  263.     INSERT INTO WIZYTY
  264.     VALUES (seq_wizyty.NEXTVAL, id_pac, NULL, NULL, NULL, NULL);
  265. EXCEPTION
  266.     WHEN INVALID_CURSOR THEN
  267.         DBMS_OUTPUT.PUT_LINE('Bledny kursor');
  268. END;
  269.  
  270. -- Zadanie 2
  271.  
  272. CREATE OR REPLACE
  273. FUNCTION zad2(
  274.     OD IN WIZYTY.DATA%TYPE, DO IN  WIZYTY.DATA%TYPE
  275. ) RETURN NUMBER IS
  276.     CURSOR cur IS
  277.         SELECT P.IMIE, P.NAZWISKO, W.DATA, W.GODZINA, L.IMIE "LIMIE", L.NAZWISKO "LNAZWISKO"
  278.         FROM PACJENCI P, WIZYTY W, LEKARZE L
  279.         WHERE P.ID_PACJENTA = W.ID_PACJENTA AND
  280.             W.ID_LEKARZA = L.ID_LEKARZA AND
  281.             W.DATA >= OD AND
  282.             W.DATA <= DO
  283. BEGIN
  284.     FOR p IN cur LOOP
  285.         DBMS_OUTPUT.PUT_LINE(p.imie || ' ' || p.nazwisko || ' '
  286.             || p.data || ' ' || p.godzina || ' ' || p.limie
  287.             || ' ' || p.lnazwisko);
  288.     END LOOP;
  289.  
  290.     SELECT COUNT(*)
  291.     INTO liczba_wizyt
  292.     FROM WIZYTY
  293.     WHERE DATA >= OD AND
  294.         DATA <= DO
  295.     GROUP BY ID_PACJENTA
  296.     ORDER BY COUNT(*) DESC;
  297.  
  298.     RETURN liczba_wizyt;
  299. END;
  300.  
  301. -- Zadanie 3
  302.  
  303. CREATE OR REPLACE
  304. PROCEDURE zad3(
  305.     im OUT LEKARZE.IMIE%TYPE, nazw OUT LEKARZE.NAZWISKO%TYPE
  306. ) IS
  307.     max_pac NUMBER := 0;
  308.     CURSOR cur IS
  309.         SELECT L.IMIE, L.NAZWISKO, COUNT(DISTINCT(W.ID_PACJENTA)) "ILOSC"
  310.         FROM LEKARZE L, WIZYTY W
  311.         WHERE W.ID_LEKARZA = L.ID_LEKARZA
  312.         ORDER BY L.NAZWISKO, L.IMIE;
  313. BEGIN
  314.     FOR l IN cur LOOP
  315.         IF l.ilosc > max_pac THEN
  316.             im := l.imie;
  317.             nazw := l.nazwisko;
  318.         END;
  319.  
  320.         DBMS_OUTPUT.PUT_LINE(l.imie || ' ' || l.nazwisko || ' ' || l.ilosc);
  321.     END LOOP;
  322. END;
  323.  
  324. -- Zadanie 4
  325.  
  326. CREATE OR REPLACE
  327. TRIGGER zad4
  328. BEFORE DELETE OR INSERT ON WIZYTY
  329. FOR EACH ROW
  330. BEGIN
  331.     IF DELETING THEN
  332.         INSERT INTO TEST
  333.         VALUES (seq_test.NEXTVAL, :OLD.ID_WIZYTY || 'DELETE'); -- :NEW jest NULLem
  334.     ELSIF INSERTING THEN
  335.         INSERT INTO TEST
  336.         VALUES (seq_test.NEXTVAL, :OLD.ID_WIZYTY || 'INSERT' || :NEW.ID_WIZYTY);
  337.     END IF;
  338. END;
  339.  
  340. -- Zadanie 5
  341.  
  342. CREATE OR REPLACE PACKAGE zad5
  343. IS
  344.     PROCEDURE zad1(
  345.         im IN PACJENCI.IMIE%TYPE, nazw IN PACJENCI.NAZWISKO%TYPE
  346.     );
  347.  
  348.     FUNCTION zad2(
  349.         OD IN WIZYTY.DATA%TYPE, DO IN  WIZYTY.DATA%TYPE
  350.     ) RETURN NUMBER;
  351.  
  352.     PROCEDURE zad3(
  353.         im OUT LEKARZE.IMIE%TYPE, nazw OUT LEKARZE.NAZWISKO%TYPE
  354.     );
  355. END;
  356.  
  357. CREATE OR REPLACE PACKAGE BODY zad5
  358. IS
  359.     -- TO SAMO CO zad1 - zad3 tylko bez
  360.     -- CREATE OR REPLACE
  361. END;
  362.  
  363.  
  364.  
  365.  
  366.  
  367.  
  368.  
  369.  
  370.  
  371.  
  372.  
  373.  
  374. CREATE OR REPLACE
  375. TRIGGER zad4
  376. BEFORE UPDATE OR INSERT ON ROZPRAWY
  377. FOR EACH ROW
  378. DECLARE
  379.     iloscrozpraw NUMBER;
  380.     za_duzo_rozpraw EXCEPTION;
  381. BEGIN
  382.     SELECT COUNT(*)
  383.     INTO iloscrozpraw
  384.     FROM ROZPRAWY
  385.     WHERE DATA = :NEW.DATA;
  386.  
  387.     IF iloscrozpraw >= 5 THEN
  388.         RAISE za_duzo_rozpraw
  389. EXCEPTION
  390.     WHEN za_duzo_rozpraw THEN
  391.         DBMS_OUTPUT.PUT_LINE('Za duzo rozpraw');
  392. END;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement