Advertisement
Guest User

Untitled

a guest
Feb 17th, 2019
199
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PL/SQL 4.84 KB | None | 0 0
  1. -- ZADANIE 2
  2.  
  3. -- instrukcja wyswietlajaca nazwy oraz wagi wszystkich przedmiotow, ktorych nazwa konczy sie na 'tyka' lub 'anie', a waga jest powyzej
  4. -- sredniej wyliczonej ze wszystkich wag, np Matematyka 10
  5.  
  6. SELECT przedmiot.nazwa
  7.   FROM przedmiot
  8.   WHERE (nazwa LIKE '%tyka' OR nazwa LIKE '%anie') AND waga > (SELECT AVG(waga) FROM przedmiot);
  9.  
  10. -- instrukcja wyswietlajaca wszystkie informacje o zaliczeniu (nazwisko, imie studenta, nazwa przedmiotu oraz oceny z trzech terminow),
  11. -- gdzie ocena z dowolnego z terimnow ma wartosc NULL, np Kowalski Jan, Matematyka, 4.0
  12.  
  13. SELECT student.nazwisko,student.imie,przedmiot.nazwa,zaliczenie.termin1,zaliczenie.termin2,zaliczenie.termin3
  14.   FROM student, przedmiot, zaliczenie
  15.   WHERE (termin1 IS NULL OR termin2 IS NULL OR termin3 IS NULL) AND student.id_student = zaliczenie.id_student AND zaliczenie.id_przedmiot = przedmiot.id_przedmiot;
  16.  
  17. -- instrukcja wyswietlajaca informacje o liczbie zaliczen, do ktorych przystapil kazdy student, pod warunkiem, ze liczba zaliczen byla wieksza niz 3
  18. -- np Jan Kowalski 10
  19.  
  20. SELECT s.imie,s.nazwisko, info.liczba
  21.   FROM student s, (SELECT student.id_student,COUNT(zaliczenie.id_zaliczenie) Liczba
  22.                     FROM student, zaliczenie
  23.                     WHERE student.id_student = zaliczenie.id_student
  24.                     GROUP BY student.id_student) info
  25.   WHERE info.liczba > 3 AND info.id_student = s.id_student;
  26.  
  27. -- instrukcja tworzaca widok zawierajacy informacje o nazwie grupy wraz z iloscia studentow w danej grupie, instrukcja powinna uwzgledniac
  28. -- takze grupy, do ktorych nie zostali jeszcze przypisani studenci, dane powinny byc uporzadkowane wedlug nazw grup malejaco
  29.  
  30. CREATE OR REPLACE VIEW grupyistudenci AS
  31.  
  32.   SELECT grupa.nazwa, liczba
  33.     FROM grupa, (SELECT grupa.id_grupa,COUNT(student.id_student) Liczba
  34.                     FROM grupa, student
  35.                     WHERE student.id_grupa (+) = grupa.id_grupa
  36.                     GROUP BY grupa.id_grupa) info
  37.     WHERE info.id_grupa = grupa.id_grupa
  38.     ORDER BY grupa.nazwa DESC;
  39.  
  40. SELECT * FROM grupyistudenci;
  41.  
  42.  
  43. ==================================================ZAD3========================================================================
  44. -- funkcja wyliczajaca roznice pomiedzy minimalna, a maksymalna waga przedmiotu, w funkcji powinna zostac wykorzystana zmienna %TYPE
  45. -- lub %ROWTYPE, nalezy podaj instrukcje, ktora spowoduje uruchomienie funkcji
  46.  
  47. CREATE OR REPLACE FUNCTION roznica
  48.  
  49. RETURN NUMBER
  50.  
  51. IS
  52.  
  53. minimalna przedmiot.waga%TYPE;
  54. maksymalna przedmiot.waga%TYPE;
  55. roznica przedmiot.waga%TYPE;
  56.  
  57. BEGIN
  58.  
  59. SELECT MIN(waga)
  60.   INTO minimalna
  61.   FROM przedmiot;
  62.  
  63. SELECT MAX(waga)
  64.   INTO maksymalna
  65.   FROM przedmiot;
  66.  
  67. roznica:= maksymalna - minimalna;
  68.  
  69. RETURN roznica;
  70.  
  71. END;
  72. /
  73.  
  74. -- uruchomienie
  75.  
  76. SELECT roznica() FROM dual;
  77.  
  78.  
  79. -- procedure przegladajaca wszystkie przedmioty, jesli nazwa przedmiotu jest NULL powinien zostac zgloszony wyjatek, jesli natomiast
  80. -- waga jest NULL, to waga powinna zostac ustawiona na 1, nalezy podac instrukcje, ktora spowoduje uruchomienie procedury
  81.  
  82. CREATE OR REPLACE PROCEDURE wszystkie IS
  83.  
  84. CURSOR przedmioty IS
  85.   SELECT *
  86.   FROM przedmiot
  87.   FOR UPDATE OF przedmiot.waga;
  88.  
  89. wyjatek EXCEPTION;
  90.  
  91. zm_przedmiot przedmioty%ROWTYPE;
  92.  
  93. BEGIN
  94.  
  95. FOR zm_przedmiot IN przedmioty LOOP
  96.  
  97. IF zm_przedmiot.nazwa IS NULL THEN
  98.   RAISE wyjatek;
  99. END IF;
  100.  
  101. IF zm_przedmiot.waga IS NULL THEN
  102.   UPDATE przedmiot p
  103.   SET p.waga = 1
  104.   WHERE CURRENT OF przedmioty;
  105. END IF;
  106.  
  107. END LOOP;
  108.  
  109. EXCEPTION
  110.  
  111. WHEN wyjatek THEN DBMS_OUTPUT.PUT_LINE('Nazwa przedmiotu jest rowna NULL!');
  112.  
  113. END;
  114. /
  115.  
  116. -- sprawdzenie czy dziala
  117.  
  118. SELECT * FROM przedmiot;
  119.  
  120. INSERT INTO przedmiot(id_przedmiot,nazwa,waga) VALUES (16,'Testowy',NULL);
  121.  
  122. SELECT * FROM przedmiot;
  123.  
  124. CALL wszystkie();
  125.  
  126. SELECT * FROM przedmiot;
  127.  
  128. INSERT INTO przedmiot(id_przedmiot,nazwa,waga) VALUES (17,NULL,3);
  129.  
  130. CALL wszystkie();
  131.  
  132.  
  133. -- wyzwalacz dotyczacy dodawania wierszy do tabeli student, jezeli konto jest rozne od 0, nalezy zglosic blad aplikacji o poprawnie
  134. -- wybranym numerze, jezeli student jest dodawany do grupy, w ktorej jest juz co najmniej 15 osob, nalezy zglosic inny blad aplikacji
  135. -- o poprawnie wybranym numerze, nalezy podac instrukcje, ktora spowoduje uruchomienie wyzwalacza
  136.  
  137. CREATE OR REPLACE TRIGGER wyzwalacz
  138.  
  139. BEFORE INSERT ON student FOR EACH ROW
  140.  
  141. DECLARE liczba NUMBER;
  142.  
  143. BEGIN
  144.  
  145. IF :NEW.konto <> 0 THEN RAISE_APPLICATION_ERROR(-10000,'Konto jest rozne od zera!');
  146. END IF;
  147.  
  148. SELECT COUNT(*)
  149.   INTO liczba
  150.   FROM student, grupa
  151.   WHERE student.id_grupa = grupa.id_grupa AND grupa.id_grupa = :NEW.id_grupa;
  152.  
  153. IF liczba > 14 THEN
  154.   Raise_Application_Error(-10001,'Nie da rady stary! Gdzie chcesz zmiescic taki tlum?');
  155. END IF;
  156.  
  157. END;
  158. /
  159.  
  160. INSERT INTO student(id_student,nazwisko,imie,srednia,konto,id_grupa) VALUES (11,'Marcinkowska','Paulina',3.95,2,5);
  161.  
  162. DROP TRIGGER wyzwalacz;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement