Advertisement
virabhairava

(1)udfPlataStatusa2002/uspPlateStatusa2002

Sep 24th, 2017
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.36 KB | None | 0 0
  1. /*
  2. 1. a) Napisati baznu funkciju 'udfPlataStatusa2002' u bazi Kadrovi, koja će kao argument prihvatiti šifru radnog statusa, a vratiti ukupnu zaradu
  3. (plata i premija) koju ostvaruju svi radnici čije tekuće angažovanje (datdo je null) je u dotičnom radnom statusu, a zaposlili su se posle 2002
  4. godine. (8 poena)
  5. b) Napisati baznu proceduru 'uspPlateStatusa2002' u bazi Kadrovi, koja će kao argument prihvatiti broj radnih statusa za koje želimo prikazati
  6. podatke. Radni statusi koji će biti prikazani, se određuju po kriterijumu broja radnika koji imaju tekuće angažovanje u dotičnim radnim
  7. statusima (radni statusi u kojima je najviše angažovano radnika). Procedura treba da prikaže šifru i naziv svih radnih statusa određenih ulaznim
  8. parametrom, kao i ukupnu platu koju trenutno ostvaruju radnici u dotičnim radnim statusima, a koji su se zaposlili posle 2002 godine
  9. (razmotriti upotrebu funkcije iz zadatka 1a). Na primer, ako je ulazni parametar 3, procedura treba da vrati tražene podatke za tri radna statusa
  10. u kojima trenutno ima najviše angažovanih radnika. U realizaciji zadatka obavezno koristiti koncept kursora.
  11.  
  12. */
  13.  
  14. CREATE FUNCTION udfPlataStatusa2002(@sifStatusa numeric(7,0))
  15. RETURNS FLOAT
  16. BEGIN
  17. DECLARE @pov float;
  18.  
  19. SELECT @pov = SUM(r.PLATA + isnull(r.PREMIJA, 0))
  20. FROM ANGAZOVANJE a JOIN RADNIK r on a.SIFRAZAP=r.SIFRAZAP
  21. WHERE a.DATDO IS NULL AND a.SIFRARS=@sifStatusa AND DATEPART(year, r.DATZAP) > 2002;
  22.  
  23. IF @pov IS NULL
  24. SET @pov = 0;
  25.  
  26. RETURN @pov;
  27.  
  28. END
  29.  
  30. ////////////
  31. CREATE PROC uspPlateStatusa2002 @brStatusa int
  32. AS
  33. BEGIN
  34. DECLARE @sifraStatusa numeric(7,0), @nazivStatusa varchar(50), @ukupnaZarada float, @indeks int=0;
  35.  
  36. DECLARE c_statusi CURSOR FOR
  37. SELECT rs.SIFRARS, rs.NAZIVRS, dbo.udfPlataStatusa2002(rs.SIFRARS) as plata
  38. FROM RADNI_STATUS rs
  39. ORDER BY (SELECT COUNT(*) FROM ANGAZOVANJE a WHERE a.DATDO IS NULL AND a.SIFRARS=rs.SIFRARS) DESC;
  40.  
  41. OPEN c_statusi;
  42. FETCH NEXT FROM c_statusi INTO @sifraStatusa, @nazivStatusa, @ukupnaZarada;
  43.  
  44. WHILE @@FETCH_STATUS=0 AND @indeks<@brStatusa
  45. BEGIN
  46. PRINT('Sifra, naziv i zarada radnog statusa: ' + CAST(@sifraStatusa as varchar) + ' ' + @nazivStatusa + ' ' + CAST(@ukupnaZarada as varchar) );
  47.  
  48. SET @indeks = @indeks + 1;
  49. FETCH NEXT FROM c_statusi INTO @sifraStatusa, @nazivStatusa, @ukupnaZarada;
  50. END
  51. CLOSE c_statusi;
  52. DEALLOCATE c_statusi;
  53. END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement