Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- 1. a) Napisati baznu funkciju 'udfPlataStatusa2002' u bazi Kadrovi, koja će kao argument prihvatiti šifru radnog statusa, a vratiti ukupnu zaradu
- (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
- godine. (8 poena)
- b) Napisati baznu proceduru 'uspPlateStatusa2002' u bazi Kadrovi, koja će kao argument prihvatiti broj radnih statusa za koje želimo prikazati
- podatke. Radni statusi koji će biti prikazani, se određuju po kriterijumu broja radnika koji imaju tekuće angažovanje u dotičnim radnim
- 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
- parametrom, kao i ukupnu platu koju trenutno ostvaruju radnici u dotičnim radnim statusima, a koji su se zaposlili posle 2002 godine
- (razmotriti upotrebu funkcije iz zadatka 1a). Na primer, ako je ulazni parametar 3, procedura treba da vrati tražene podatke za tri radna statusa
- u kojima trenutno ima najviše angažovanih radnika. U realizaciji zadatka obavezno koristiti koncept kursora.
- */
- CREATE FUNCTION udfPlataStatusa2002(@sifStatusa numeric(7,0))
- RETURNS FLOAT
- BEGIN
- DECLARE @pov float;
- SELECT @pov = SUM(r.PLATA + isnull(r.PREMIJA, 0))
- FROM ANGAZOVANJE a JOIN RADNIK r on a.SIFRAZAP=r.SIFRAZAP
- WHERE a.DATDO IS NULL AND a.SIFRARS=@sifStatusa AND DATEPART(year, r.DATZAP) > 2002;
- IF @pov IS NULL
- SET @pov = 0;
- RETURN @pov;
- END
- ////////////
- CREATE PROC uspPlateStatusa2002 @brStatusa int
- AS
- BEGIN
- DECLARE @sifraStatusa numeric(7,0), @nazivStatusa varchar(50), @ukupnaZarada float, @indeks int=0;
- DECLARE c_statusi CURSOR FOR
- SELECT rs.SIFRARS, rs.NAZIVRS, dbo.udfPlataStatusa2002(rs.SIFRARS) as plata
- FROM RADNI_STATUS rs
- ORDER BY (SELECT COUNT(*) FROM ANGAZOVANJE a WHERE a.DATDO IS NULL AND a.SIFRARS=rs.SIFRARS) DESC;
- OPEN c_statusi;
- FETCH NEXT FROM c_statusi INTO @sifraStatusa, @nazivStatusa, @ukupnaZarada;
- WHILE @@FETCH_STATUS=0 AND @indeks<@brStatusa
- BEGIN
- PRINT('Sifra, naziv i zarada radnog statusa: ' + CAST(@sifraStatusa as varchar) + ' ' + @nazivStatusa + ' ' + CAST(@ukupnaZarada as varchar) );
- SET @indeks = @indeks + 1;
- FETCH NEXT FROM c_statusi INTO @sifraStatusa, @nazivStatusa, @ukupnaZarada;
- END
- CLOSE c_statusi;
- DEALLOCATE c_statusi;
- END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement