garnettkg

rbp odb

May 27th, 2016
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. 2. ZADATAK
  2. Kreirati funkciju fun_Najplaceniji koja vraća sve podatke o radniku sa najvećim primanjima u
  3. preduzeću.
  4.  
  5. create function fun_Najplaceniji()
  6. returns table
  7. as
  8. return
  9. (
  10. select *
  11. from RADNIK
  12. where plata+isnull(premija,0)= (select max(plata+isnull(premija,0))from radnik)
  13.  
  14. )
  15.  
  16. select *
  17. from dbo.fun_Najplaceniji()
  18.  
  19. 3. ZADATAK
  20. Kreirati funkciju fun_BrojRadnika koja za zadatu kvalifikaciju vraća koliko radnika u
  21. preduzeću ima zadatu kvalifikaciju . U slučaju da se zada nepostojeća kvalifikacija funkcija
  22. treba da vrati broj 200.
  23.  
  24. create function fun_BrojRadnika(
  25. @kvalif nchar(30)
  26. )
  27. returns int
  28. as
  29. begin
  30. declare @brradnika int
  31. if NOT EXISTS (select kvalif from RADNIK where kvalif=@kvalif)
  32. begin
  33. set @brradnika=200
  34. end
  35. else
  36. begin
  37. select @brradnika=count(id_radnika)
  38. from RADNIK
  39. where Kvalif=@kvalif
  40. end
  41. return @brradnika
  42. end
  43.  
  44. print dbo.fun_BrojRadnika('VKV')
  45.  
  46.  
  47. 4. ZADATAK
  48. Kreirati pogled view_ORP koji prikazuje imena odeljenja, imena radnika koji rade u tim
  49. odeljenjima i imena projekata na kojima rade samo za radnike koji imaju više od 20 godina
  50. staža.
  51.  
  52. create view view_ORP
  53. as
  54. SELECT dbo.ODELJENJE.Ime_od,dbo.RADNIK.Ime,dbo.PROJEKAT.Ime_proj
  55. from radnik, odeljenje, ucesce,PROJEKAT
  56. where radnik.id_radnika = UCESCE.Id_radnika and odeljenje.Id_odeljenja =radnik.Id_odeljenja and PROJEKAT.Id_projekta = UCESCE.Id_projekta and (year (sysdatetime())-year(dat_zap)>20)
  57.  
  58.  
  59. select *
  60. from view_ORP
  61.  
  62. 5. ZADATAK
  63. Kreirati uskladištenu proceduru sp_Premesti koja radnika čije se ime i prezime zadaje
  64. prebacuje u odeljenje čije se ime zadaje. U slucaju da radnik vec radi u trazenom odeljenju
  65. vratiti poruku RADNIK JE VEC U TRAZENOM ODELJENJU, u protivno vratiti poruku RADNIK
  66. PREMESTEN
  67.  
  68. create procedure sp_Premesti
  69. @ime nchar(30),
  70. @prezime nchar(30),
  71. @imeod nchar(30)
  72. as
  73. begin
  74. if not exists (select id_radnika from RADNIK where ime=@ime and prezime=@prezime and Id_odeljenja= (select id_odeljenja from odeljenje where ime_od=@imeod))
  75. begin
  76. update radnik
  77. set Id_odeljenja = (select id_odeljenja from odeljenje where ime_od=@imeod)
  78. where ime=@ime and prezime=@prezime
  79. select 'RADNIK PREMESTEN'
  80. end
  81. else
  82. begin
  83. select 'RADNIK JE VEC U TRAZENOM ODELJENJU'
  84. end
  85. end
  86.  
  87.  
  88. exec sp_Premesti 'Aleksandar', 'Marić', 'Komercijala'
  89.  
  90.  
  91.  
  92. 6. ZADATAK
  93. Kreirati triger trig_RadnikPremija koji samo za promenu vrednosti premije u tabeli radnik
  94. vraca poruku PREMIJA PROMENJENA.
  95.  
  96. create trigger trig_RadnikPremija
  97. on radnik
  98. for update
  99. as
  100. begin
  101. if update(premija)
  102. begin
  103. select 'PREMIJA PROMENJENA'
  104.  
  105. end
  106. end
  107.  
  108. 7. ZADATAK
  109. Kreirati proceduru sp_Odeljenje sa primenom transakcije. Procedura dodaje novo odeljenje
  110. cije se ime i mesto zadaju. Ukoliko je ime odeljenja krace od 5 karaktera obustaviti
  111. transakciju I vratiti poruku TRANSAKCIJA OBUSTAVLJENA u protivnom potvrditi transakciju I
  112. vratiti poruku TRANSAKCIJA OBAVLJENA.
  113.  
  114. create procedure sp_Odeljenje
  115. @imeod nchar(30),
  116. @mesto nchar(30)
  117. as
  118. begin
  119. declare @idOdeljenja int
  120. select @idodeljenja=max(id_odeljenja)
  121. from odeljenje
  122. set @idodeljenja=@idodeljenja+10
  123. begin tran
  124. insert into odeljenje(id_odeljenja, ime_od, mesto)
  125. values(@idodeljenja, @imeod, @mesto)
  126. if len (@imeod)<5
  127. begin
  128. rollback
  129. select 'TRANSAKCIJA OBUSTAVLJENA'
  130. end
  131. else
  132. begin
  133. commit
  134. select 'TRANSAKCIJA OBAVLJENA'
  135. end
  136. end
  137.  
  138. 8. ZADATAK
  139. Kreirati uskladištenu proceduru sp_PovecajPlatu koja u sistemskoj tabeli ##tempRadnik
  140. pamti stanje tabele Radnik a potom povećava plate radncima sa zadatom kvalifikacijom za
  141. zadati iznos. Procedura vraca ime,prezime i platu radnika samo za radnike kojima je plata
  142. promenjena.
  143.  
  144. create procedure sp_PovecajPlatu
  145. @kvalif nchar(5),
  146. @procenat real
  147. as
  148. begin
  149. if exists (select * from tempdb.INFORMATION_SCHEMA.TABLES where
  150. tempdb.INFORMATION_SCHEMA.TABLES.TABLE_NAME='##tempRadnik')
  151. begin
  152. truncate table ##tempRadnik
  153. insert into ##tempRadnik
  154. select *
  155. from RADNIK
  156. end
  157. else
  158. begin
  159. select * into ##tempRadnik
  160. from RADNIK
  161. end
  162. update radnik
  163. set plata=plata+plata*@procenat/100
  164. where kvalif=@kvalif
  165. select ime,prezime,plata
  166. from ##tempRadnik
  167. except
  168. select ime,prezime,plata
  169. from radnik
  170. end
  171.  
  172. -----------------------------------------------------------------------------------------------------------------------
  173. GROUPA 1.
  174. 3. ZADATAK
  175. Kreirati pogled view_RP koji prikazuje imena, prezimena radnika, njihova primanja I imena projekata na kojima rade samo za radike koji rade na 2 projekta I imaju vise od 10 godina staza.
  176.  
  177. create view view_RP
  178. as
  179. select ime, prezime, ime_proj, plata+isnull(premija,0) as primanja
  180. from radnik, projekat, ucesce
  181. where radnik.id_radnika=ucesce.id_radnika and ucesce.id_projekta=projekat.id_projekta and
  182. radnik.id_radnika in (select id_radnika from ucesce group by id_radnika having count(Id_projekta)=2)
  183. and year(sysdatetime())-year(dat_zap)>10
  184.  
  185. 2. ZADATAK
  186. Kreirati funkciju fun_KvalifPremija koja vraca koliko radnika sa zadatom kvalifikacijom nema premiju
  187. - Prikazati koliko KV radnika nema premiju koristeci funkciju fun_KvalifPremija
  188.  
  189. create function fun_KvalifPremija(@kvalif nchar(5))
  190. returns int
  191. as
  192. begin
  193. declare @brRadnika int
  194. select @brRadnika=count(id_radnika)
  195. from radnik
  196. where @kvalif=kvalif and premija is null
  197. return @brRadnika
  198. end
  199.  
  200. print dbo.fun_KvalifPremija('KV')
  201.  
  202. 5. ZADATAK
  203. 5. Kreirati triger trig_RadnikPlata koji samo za promenu vrednosti Plate u tabeli Radnik vraca poruku RADNIKU POVECANA PLATA.
  204.  
  205. create trigger trig_radnikPlata
  206. on radnik
  207. for update
  208. as
  209. begin
  210. if update (plata)
  211. begin
  212. select 'RADNIKU POVECANA PLATA'
  213. end
  214. end
  215.  
  216. 4. ZADATAK
  217. Kreirati uskladistenu proceduru sp_PovecajPlatu koja radniku cije se ime i prezime zadaje povecava platu za zadati procenat. U slucaju da je plata veca od prosecne palte savetnika vratiti poruku VELIKA PLATA, u protivno vratiti poruku PLATA POVECANA.
  218.  
  219. create procedure sp_PovecajPlatu(@ime nchar(30), @prezime nchar(30), @procenat real)
  220. as
  221. begin
  222. declare @savetnikplata int
  223. declare @plata int
  224.  
  225. select @savetnikplata=AVG(plata)
  226. from radnik
  227. where posao='savetnik'
  228.  
  229. select @plata=plata+plata*@procenat/100
  230. from radnik
  231.  
  232.  
  233. if(@plata<@savetnikplata)
  234. begin
  235. update radnik
  236. set plata=plata+plata*@procenat/100
  237. where ime=@ime and prezime=@prezime
  238. select 'PLATA POVEĆANA'
  239. end
  240. else
  241. begin
  242. /*select plata
  243. from radnik
  244. where ime=@ime and prezime=@prezime/*
  245. select 'VELIKA PLATA'
  246. end
  247. end
  248.  
  249.  
  250. ---------------------------------------------------------
  251. 3 GRUPA
  252. 2. ZADATAK
  253. Kreirati funkciju fun_Projekat koja vraca sve podatke o radnicima koji rade na zadatom projektu i imaju vise od 15 godina staza.
  254. Prikazati sve podatke o radnicima koji rade projektu Uvoz i imaju vise od 15 godina staza koristeci funkciju.
  255.  
  256. create function fun_projekat(@projekat nchar(20))
  257. returns table
  258. as
  259. return
  260. (
  261. select dbo.Radnik.*
  262. from radnik, ucesce,PROJEKAT
  263. where radnik.id_radnika = UCESCE.Id_radnika and PROJEKAT.Id_projekta = UCESCE.Id_projekta
  264. and ime_proj=@projekat
  265. and (year (sysdatetime())-year(dat_zap)>15)
  266. )
  267.  
  268.  
  269. select *
  270. from dbo.fun_projekat('Uvoz')
  271.  
  272.  
  273. 5. ZADATAK
  274. Kreirati triger trig_RadnikProjekat koji u slucaju dodavanja radnika na projekat vraca poruku RADNICI DODATI NA PROJEKAT
  275.  
  276. create trigger trig_RadnikProjekat
  277. on Ucesce
  278. for insert
  279. as
  280. select 'Radnici dodati na projekat'
Add Comment
Please, Sign In to add comment