Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- 1. a) Napisati baznu funkciju 'udfRadnoMestoGodina' u bazi Kadrovi, koja će kao argument prihvatiti šifru radnog mesta i kalendarsku godinu, a
- 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
- kalendarske godine koja je prosleđena kao parametar funkcije. (8 poena)
- b) Napisati baznu proceduru 'uspRadnoMestoPlata' u bazi Kadrovi, koja će kao argument prihvatiti broj radnih mesta za koje želimo prikaz
- njihovih podataka, kao i kalendarsku godinu. Radna mesta koja će biti uključena, se određuju po kriterijumu broja tekućih angažovanja na
- 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
- ulaznim parametrom, kao i prosečnu platu koju trenutno ostvaruju radnici na dotičnim radnim mestima, i koji su se zaposlili pre kalendarske
- godine koja je prosleđena kao parametar procedure (razmotriti upotrebu funkcije iz zadatka 1). Na primer, ako su ulazni parametri 3 i 2009,
- 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
- uzimaju u obzir radnici zaposleni pre 2001 godine. U realizaciji zadatka obavezno koristiti koncept kursora.
- */
- CREATE FUNCTION udfRadnoMestoGodina(@sifRadnogMesta numeric(7,0), @godina int)
- RETURNS float
- BEGIN
- DECLARE @pov float;
- SELECT @pov = AVG(r.PLATA)
- FROM ANGAZOVANJE a JOIN RADNIK r on a.SIFRAZAP=r.SIFRAZAP
- WHERE a.DATDO IS NULL AND a.SIFRARM=@sifRadnogMesta AND datepart(YEAR, r.DATZAP) < @godina
- RETURN @pov;
- END
- ////
- CREATE PROC uspRadnoMestoPlata @brMesta int, @godina int
- AS
- BEGIN
- DECLARE @sifraRM numeric(7,0), @nazivRM varchar(50), @prosecnaZarada float, @indeks int=0;
- DECLARE c_radnaMesta CURSOR FOR
- SELECT rm.SIFRARM, rm.NAZIVRM, dbo.udfRadnoMestoGodina(rm.SIFRARM, @godina) as prosek
- FROM RADNO_MESTO rm
- ORDER BY (SELECT COUNT(*) FROM ANGAZOVANJE a WHERE a.DATDO IS NULL AND a.SIFRARM=rm.SIFRARM) DESC
- OPEN c_radnaMesta;
- FETCH NEXT FROM c_radnaMesta INTO @sifraRM, @nazivRM, @prosecnaZarada;
- WHILE @@FETCH_STATUS=0 AND @indeks<@brMesta
- BEGIN
- PRINT('Sifra, naziv i zarada radnog mesta: ' + CAST(@sifraRM as varchar) + ' ' + @nazivRM + ' ' + CAST(@prosecnaZarada as varchar) );
- SET @indeks = @indeks + 1;
- FETCH NEXT FROM c_radnaMesta INTO @sifraRM, @nazivRM, @prosecnaZarada;
- END
- CLOSE c_radnaMesta;
- DEALLOCATE c_radnaMesta;
- END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement