Advertisement
virabhairava

(1)udfRadnoMesto-uspRadnoMestoPlata

Sep 24th, 2017
51
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.51 KB | None | 0 0
  1. /*
  2. 1. a) Napisati baznu funkciju 'udfRadnoMestoGodina' u bazi Kadrovi, koja će kao argument prihvatiti šifru radnog mesta i kalendarsku godinu, a
  3. vratiti prosečnu platu koju ostvaruju svi radnici čije tekuće angažovanje (datdo je null) je na dotičnom radnom mestu, i koji su se zaposlili pre
  4. kalendarske godine koja je prosleđena kao parametar funkcije. (8 poena)
  5. b) Napisati baznu proceduru 'uspRadnoMestoPlata' u bazi Kadrovi, koja će kao argument prihvatiti broj radnih mesta za koje želimo prikaz
  6. njihovih podataka, kao i kalendarsku godinu. Radna mesta koja će biti uključena, se određuju po kriterijumu broja tekućih angažovanja na
  7. dotičnim radnim mestima (radna mesta koja imaju najviše angažovanja). Procedura treba da prikaže šifru i naziv svih radnih mesta određenih
  8. ulaznim parametrom, kao i prosečnu platu koju trenutno ostvaruju radnici na dotičnim radnim mestima, i koji su se zaposlili pre kalendarske
  9. godine koja je prosleđena kao parametar procedure (razmotriti upotrebu funkcije iz zadatka 1). Na primer, ako su ulazni parametri 3 i 2009,
  10. procedura treba da vrati tražene podatke za tri radna mesta koja trenutno imaju najviše angažovanja, pri čemu se za računanje proseka plata
  11. uzimaju u obzir radnici zaposleni pre 2001 godine. U realizaciji zadatka obavezno koristiti koncept kursora.
  12. */
  13.  
  14. CREATE FUNCTION udfRadnoMestoGodina(@sifRadnogMesta numeric(7,0), @godina int)
  15.  
  16. RETURNS float
  17. BEGIN
  18. DECLARE @pov float;
  19.  
  20. SELECT @pov = AVG(r.PLATA)
  21. FROM ANGAZOVANJE a JOIN RADNIK r on a.SIFRAZAP=r.SIFRAZAP
  22. WHERE a.DATDO IS NULL AND a.SIFRARM=@sifRadnogMesta AND datepart(YEAR, r.DATZAP) < @godina
  23.  
  24.  
  25. RETURN @pov;
  26. END
  27.  
  28. ////
  29.  
  30. CREATE PROC uspRadnoMestoPlata @brMesta int, @godina int
  31. AS
  32. BEGIN
  33. DECLARE @sifraRM numeric(7,0), @nazivRM varchar(50), @prosecnaZarada float, @indeks int=0;
  34.  
  35. DECLARE c_radnaMesta CURSOR FOR
  36. SELECT rm.SIFRARM, rm.NAZIVRM, dbo.udfRadnoMestoGodina(rm.SIFRARM, @godina) as prosek
  37. FROM RADNO_MESTO rm
  38. ORDER BY (SELECT COUNT(*) FROM ANGAZOVANJE a WHERE a.DATDO IS NULL AND a.SIFRARM=rm.SIFRARM) DESC
  39.  
  40. OPEN c_radnaMesta;
  41. FETCH NEXT FROM c_radnaMesta INTO @sifraRM, @nazivRM, @prosecnaZarada;
  42.  
  43. WHILE @@FETCH_STATUS=0 AND @indeks<@brMesta
  44. BEGIN
  45. PRINT('Sifra, naziv i zarada radnog mesta: ' + CAST(@sifraRM as varchar) + ' ' + @nazivRM + ' ' + CAST(@prosecnaZarada as varchar) );
  46.  
  47. SET @indeks = @indeks + 1;
  48. FETCH NEXT FROM c_radnaMesta INTO @sifraRM, @nazivRM, @prosecnaZarada;
  49. END
  50. CLOSE c_radnaMesta;
  51. DEALLOCATE c_radnaMesta;
  52. END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement