Advertisement
wiktorek140

261

May 29th, 2021
1,588
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PL/SQL 1.19 KB | None | 0 0
  1. DECLARE
  2. CURSOR CS IS SELECT id_student FROM studenci FOR UPDATE;
  3. tmp BOOLEAN;
  4. LiczbaPrzedmiotowDoZdania NUMBER;
  5. dataTMP DATE;
  6.  
  7. FUNCTION CzyZdalWszystkie (idStudent VARCHAR, liczbaPrzedmiotow NUMBER) RETURN BOOLEAN IS
  8. lEgz NUMBER;
  9. BEGIN
  10.     SELECT COUNT(DISTINCT id_przedmiot) INTO lEgz FROM egzaminy WHERE id_student = idStudent AND zdal = 'T';
  11.  
  12.     IF lEgz = liczbaPrzedmiotow THEN
  13.         RETURN TRUE;
  14.         ELSE RETURN FALSE;
  15.     END IF;
  16. END CzyZdalWszystkie;
  17.  
  18. FUNCTION OstatniaData (idStudent VARCHAR) RETURN DATE IS
  19. dataEgz DATE;
  20. BEGIN
  21.     SELECT MAX(data_egzamin) INTO dataEgz FROM egzaminy WHERE id_student = idStudent AND zdal = 'T';
  22.     RETURN dataEgz;
  23. END OstatniaData;
  24. BEGIN
  25.  
  26. SELECT COUNT(*) INTO LiczbaPrzedmiotowDoZdania FROM Przedmioty;
  27.  
  28. FOR vC IN CS LOOP
  29.     tmp := CzyZdalWszystkie(vC.id_student, LiczbaPrzedmiotowDoZdania);
  30.         IF tmp THEN
  31.             dataTMP := OstatniaData(vC.id_student);
  32.             UPDATE studenci
  33.                 SET nr_ecdl = vC.id_student, data_ecdl = dataTMP
  34.                 WHERE CURRENT OF CS;
  35.        
  36.         END IF;
  37.     END LOOP;
  38. END;
  39.  
  40.  
  41. --select count(*) from egzaminy where id_student='02'
  42. --select * from studenci
  43.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement