Advertisement
Guest User

Untitled

a guest
Jun 20th, 2018
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PL/SQL 2.35 KB | None | 0 0
  1. -- Nie można edytować nazwiska ucznia, który ma conajmniej 1 ocene
  2.  
  3. CREATE OR REPLACE TRIGGER trigblok
  4. BEFORE UPDATE OF Nazwisko ON Uczen
  5. FOR EACH ROW
  6.  
  7. DECLARE
  8. v_oceny NUMBER;
  9.  
  10. BEGIN
  11.  
  12.     BEGIN
  13.         SELECT NVL(COUNT(OCENA),0) INTO v_oceny FROM OCENY WHERE idUczen = (SELECT idUczen FROM Uczen WHERE NAZWISKO=NEW:Nazwisko);
  14.         EXCEPTION WHEN NO_DATA_FOUND
  15.         v_oceny := 0;
  16.     END
  17.    
  18.     IF ({NEW:Nazwisko IS NOT NULL)&&( v_oceny > 0 )} THEN
  19.          RAISE_APPLICATION_ERROR(-20001, 'NIE MOŻNA EDYTOWAĆ UCZNIA, KTÓRY MA JUŻ JAKĄŚ OCENĘ');
  20.     END IF;
  21.  
  22. END;
  23.  
  24. --- LICZENIE ŚREDNIEJ UCZNIÓW I WYPISYWANIE NA EKRAN
  25.  
  26. CREATE OR REPLACE PROCEDURE licz_srednia(p_grupa IN NUMBER) IS
  27.  
  28.   v_avg NUMBER;
  29.  
  30. BEGIN
  31.  
  32.   IF (p_grupa=0) THEN
  33.  
  34.  
  35.     SELECT AVG(OCENA) INTO v_avg FROM OCENY o join uczen u ON u.iduczen = o.iduczen;
  36.     DBMS_OUTPUT.put_line('Srednia wszystkich uczniów to: ' || v_avg);
  37.    
  38.   ELSE
  39.    
  40.   BEGIN
  41.     SELECT AVG(OCENA) INTO v_avg FROM OCENY o JOIN Uczen U ON o.iduczen = u.iduczen join sklad_grupy s ON s.idUCzen = u.iduczen
  42.     join grupa g ON g.idgrupa = s.idgrupa WHERE g.numer_grupy = p_grupa;
  43.     DBMS_OUTPUT.put_line('Srednia wszystkich uczniów grupy '|| p_grupa ||  'to: ' || v_avg);
  44.    
  45.     EXCEPTION WHEN NO_DATA_FOUND THEN
  46.       DBMS_OUTPUT.put_line('Nie ma takiej grupy');
  47.    END;
  48.   END IF;
  49.  
  50.  
  51.  
  52. END;
  53.  
  54.  
  55. ----Trigger kontrolujący liczby studentow w grupie
  56.  
  57. CREATE OR REPLACE TRIGGER max_osob_w_grupie
  58. BEFORE INSERT ON Sklad_grupy
  59. FOR EACH ROW
  60.  
  61. DECLARE
  62. v_ilosc NUMBER;
  63.  
  64. BEGIN
  65.  
  66.   SELECT COUNT(idUczen) INTO v_ilosc FROM sklad_grupy s join grupa g ON s.idgrupa = g.idgrupa join kurs k ON k.idgrupa = g.idgrupa GROUP BY g.idgrupa;
  67.  
  68.   IF (v_ilosc >=30 ) THEN
  69.      RAISE_APPLICATION_ERROR(-20001, 'PRZEKROCZONO MAKSYMALNA LICZBE STUDENTÓW');
  70.   END IF;
  71.  
  72. END;
  73.  
  74. ---Procedura pokazujaca telefony
  75.  
  76. CREATE OR REPLACE PROCEDURE pokaz_telefony(p_grupa IN NUMBER) IS
  77.  
  78.   CURSOR telefony
  79.   IS
  80.   SELECT Numer_telefonu, Nazwisko FROM Uczen U join Sklad_grupy s ON u.iduczen = s.iduczen WHERE s.idgrupa = p_grupa;
  81.  
  82.   v_number NUMBER;
  83.   v_name VARCHAR2(20);
  84.  
  85. BEGIN
  86.  
  87.  
  88.    
  89.   OPEN telefony;
  90.  
  91.   LOOP
  92.     FETCH
  93.        telefony INTO v_number, v_name;
  94.        DBMS_OUTPUT.put_line(v_name || ' ' || v_number);
  95.    
  96.     EXIT WHEN telefony%NotFOUND;
  97.    
  98.   END LOOP;
  99.  
  100.   CLOSE telefony;
  101.  
  102.  
  103. END;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement