Advertisement
wiktorek140

269

May 29th, 2021
1,957
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PL/SQL 1.45 KB | None | 0 0
  1. CREATE OR REPLACE FUNCTION CzyZdalWszystkie (idStudent VARCHAR, liczbaPrzedmiotow NUMBER) RETURN BOOLEAN IS
  2. lEgz NUMBER;
  3. BEGIN
  4.     SELECT COUNT(DISTINCT id_przedmiot) INTO lEgz FROM egzaminy WHERE id_student = idStudent AND zdal = 'T';
  5.  
  6.     IF lEgz = liczbaPrzedmiotow THEN
  7.         RETURN TRUE;
  8.         ELSE RETURN FALSE;
  9.     END IF;
  10. END CzyZdalWszystkie;
  11.  
  12. /
  13.  
  14. CREATE OR REPLACE PROCEDURE weryfikacjaECDL IS
  15. CURSOR CS IS SELECT id_student, nr_ecdl FROM studenci FOR UPDATE;
  16. tmp BOOLEAN;
  17. LiczbaPrzedmiotowDoZdania NUMBER;
  18. BEGIN
  19.  
  20. SELECT COUNT(*) INTO LiczbaPrzedmiotowDoZdania FROM Przedmioty;
  21.  
  22. FOR vC IN CS LOOP
  23.     tmp := CzyZdalWszystkie(vC.id_student, LiczbaPrzedmiotowDoZdania);
  24.     IF tmp THEN
  25.         IF vC.id_student = vC.nr_ecdl THEN
  26.             DBMS_OUTPUT.Put_line(vC.id_student || ' Poprawna wartość');
  27.         ELSE
  28.             DBMS_OUTPUT.Put_line(vC.id_student || ' Niepoprawna wartość lub jej brak');
  29.         END IF;
  30.     ELSE
  31.     -- nullujemy wartość
  32.         IF vC.nr_ecdl IS NOT NULL THEN
  33.             DBMS_OUTPUT.Put_line(vC.id_student || ' Niepoprawna wartość - należy wyczyścić!');
  34.             UPDATE studenci SET nr_ecdl = NULL
  35.             WHERE CURRENT OF CS;
  36.         END IF;
  37.     END IF;
  38. END LOOP;
  39. END weryfikacjaECDL;
  40.  
  41. /
  42.  
  43. BEGIN
  44. weryfikacjaECDL;
  45. END;
  46.  
  47. --UPDATE studenci SET nr_ecdl = '12345' WHERE id_student = '0000006';
  48. --select count(*) from egzaminy where id_student='02'
  49. --select * from studenci
  50.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement