· 3 years ago · Sep 15, 2022, 05:00 PM
1--I6
2
3/*Napišite proceduru koja prima naziv potkategorije i ID kategorije, umece novu potkategoriju za tu kategoriju u tablicu Potkategorija
4i kroz izlazni parametar vraca vrijednost primarnog kljuca umetnutogretka.
5Ako vec postoji potkategorija zadanog imena za tu kategoriju, ne treba je upisivati ponovno i u tom slucaju kroz izlazni parametar vratite vrijednost -1.
6Pozovite proceduru dva puta s istim nazivom potkategorije i ID-om kategorije te ispišite vracenu vrijednost. */
7
8--1
9CREATE PROC NewPodkategorija
10 @naziv nvarchar(100)
11 @kategorijaId int
12 @idPotkategorija int output
13as
14if exists (select Naziv from Potkategorija where Naziv = @Naziv ) begin
15 set @idPotkategorija = -1
16end
17else begin
18 insert into Potkategorija (KategorijaID, Naziv)
19 values (@kategorijaId, @naziv)
20 set @idPotkategorija = SCOPE_IDENTITY()
21end
22go
23
24/*Procedura koja prima ime i prezime komercijalista i ubacuje novoga, kroz izlazni parametar
25vraca novonastali id, odnosno -1 ukoliko isti vec postoji (pa ga se ni ne mora ubacivat)*/
26
27CREATE PROC NewKomerijalist
28 @ime nvarchar(100),
29 @prezime nvarchar(100),
30 @IdKomercijalist int output
31AS
32IF EXISTS (select Ime, Prezime from Komercijalist where Ime = @ime and Prezime = @prezime) BEGIN
33 SET @IdKomercijalist = -1
34END
35ELSE BEGIN
36 INSERT INTO Komercijalist (Ime, Prezime)
37 VALUES (@ime, @prezime)
38 SET @IdKomercijalist = SCOPE_IDENTITY()
39END
40GO
41
42DECLARE @idKomercijalista int
43EXECUTE NewKomerijalist 'Baka', 'Prase', @idKomercijalista = OUTPUT
44
45/*Procedura prima ID proizvoda, provjerava postoji li i je li kad prodan, preko return mora vratit
46sljedece vrijednosti -1 (ne postoji), 0 (postoji, nikad prodan) 1 (postoji i prodavan n puta)*/
47
48CREATE PROC ProizvodChecker
49 @IdProizvod int
50AS
51IF
52 NOT EXISTS(SELECT Naziv FROM Proizvod WHERE IDProizvod = @IdProizvod)
53BEGIN
54 RETURN -1
55END
56IF
57
58 @IdProizvod IN (
59 SELECT
60 p.IDProizvod FROM Proizvod AS p
61 WHERE (SELECT
62 SUM(Kolicina) FROM Stavka WHERE ProizvodID = p.IDProizvod)
63 IS NULL)
64BEGIN
65 RETURN 0
66END
67 RETURN 1
68
69
70
71/*Implementirajte CRUD na Potkategorija s 2 procedure (C,U) i (R,D)
72Napravite umetanje, izmjenu, dohvacanje i brisanje jedne potkategorije*/
73
74CREATE PROC CreateUpdatePotkategorija
75 @IdPotkategorija int,
76 @kategorijaId int,
77 @naziv nvarchar(100) --ODABIR VARIJABLI
78AS
79 IF EXISTS (SELECT * FROM Potkategorija WHERE Naziv = @naziv) BEGIN --POŠTO IMAMO CREATE I EDIT TREBAMO PROVJERITI POSTOJI LI ITEM U BAZI
80 UPDATE Potkategorija -- AKO POSTOJI UPDATEMO GA PREMA INTU
81 SET Naziv = @naziv, KategorijaID = @kategorijaId
82 WHERE IDPotkategorija = @IdPotkategorija
83END
84ELSE BEGIN --AKO NE POSTOJI DODAJEMO NOVI
85 INSERT INTO Potkategorija (Naziv, KategorijaID)
86 VALUES (@naziv, @kategorijaId)
87 SET @IdPotkategorija = SCOPE_IDENTITY() --PRILIKOM DODVANJA NOVIH ITEMA SCOPE_IDENTITY POSTAVITI NA INT
88END
89
90CREATE PROC ReadDeletePotkategorija
91 @idPotkategorija int,
92 @operacija char = 'R' --POŠTO IMAMO DVIJE OPERACIJE KOJE SE NE MOGU RIJEŠITI IF UVJETOM DODAJEMO OPERACIJA VARIJABLU
93AS
94 IF
95 @operacija = 'R'
96 BEGIN -- AKO JE OPERACIJA R -> READ IZVRŠAVA SE SELECT BAZIRAN NA ID-u
97 SELECT * FROM Potkategorija
98 WHERE IDPotkategorija = @idPotkategorija
99 END
100 ELSE IF @operacija = 'D' -- AKO JE OPERACIJA D-> DELETE IZVRŠAVA SE BRISANJE POTKATEGORIJE BAZIRANO NA INTU
101 BEGIN
102 PRINT 'Brise se potkategorija:' + (SELECT Naziv FROM Potkategorija WHERE IDPotkategorija = @idPotkategorija) --ISPIS POTKATEGORIJE KOJA SE BRIŠE
103 DELETE FROM Potkategorija
104 WHERE IDPotkategorija = @idPotkategorija
105 END
106
107--I6.2
108/*Napišite proceduru koja prima XML dokument oblika:*/
109
110CREATE PROCEDURE dbo.KarticaXMLTest
111 @data2 xml
112AS
113INSERT INTO Kategorija (Naziv)
114 SELECT
115 Tablica.Stupac.value('@Naziv', 'nvarchar(50)')
116 FROM @data2.nodes('/Kategorija') AS Tablica(Stupac)
117DECLARE @IDKategorija int = @@IDENTITY
118INSERT INTO Potkategorija (Naziv, KategorijaID)
119 SELECT
120 Tablica.Stupac.value('@Naziv', 'nvarchar(50)'),
121 @IDKategorija
122 FROM @data2.nodes('/Kategorija/Potkategorija') AS Tablica(Stupac)
123
124
125DECLARE @IDPodkategorija int = @@IDENTITY
126INSERT INTO Proizvod(Naziv, BrojProizvoda, MinimalnaKolicinaNaSkladistu, CijenaBezPDV,PotkategorijaID)
127 SELECT
128 Tablica.Stupac.value('@Naziv', 'nvarchar(50)'),
129 Tablica.Stupac.value('@BrojProizvoda', 'nvarchar(50)'),
130 Tablica.Stupac.value('@MinimalnaKolicinaNaSkladistu', 'nvarchar(50)'),
131 Tablica.Stupac.value('.', 'nvarchar(50)'),
132 @IDPodkategorija
133 FROM @data2.nodes('/Kategorija/Potkategorija/Proizvod') AS Tablica(Stupac)
134
135/*
136 nodename Selects all nodes with the name "nodename"
137 / Selects from the root node
138 // Selects nodes in the document from the current node that match the selection no matter where they are
139 . Selects the current node
140 .. Selects the parent of the current node
141 @ Selects attributes
142*/
143
144DECLARE @data2 XML = '
145 <Kategorija Naziv="Piće">
146 <Potkategorija Naziv="Alkohol">
147 <Proizvod BrojProizvoda="3" MinimalnaKolicinaNaSkladistu="1" Naziv="Gin"> 3</Proizvod>
148 <Proizvod BrojProizvoda="3" MinimalnaKolicinaNaSkladistu="1" Naziv="">2 </Proizvod>
149 </Potkategorija>
150 </Kategorija>'
151
152/* SWITCH CASE */
153
154
155CASE
156 WHEN Quantity > 30 THEN 'The quantity is greater than 30'
157 WHEN Quantity = 30 THEN 'The quantity is 30'
158 ELSE 'The quantity is under 30'
159END
160
161
162
163DECLARE @IDPodkategorija int = @@IDENTITY
164INSERT INTO Proizvod(Naziv, BrojProizvoda, MinimalnaKolicinaNaSkladistu, CijenaBezPDV,PotkategorijaID)
165 SELECT
166 CASE
167 WHEN Tablica.Stupac.value('@Naziv', 'nvarchar(50)') != '' THEN Tablica.Stupac.value('@Naziv', 'nvarchar(50)')
168 ELSE 'Nema nayiv'
169 END,
170 Tablica.Stupac.value('@BrojProizvoda', 'nvarchar(50)'),
171 Tablica.Stupac.value('@MinimalnaKolicinaNaSkladistu', 'nvarchar(50)'),
172 Tablica.Stupac.value('.', 'nvarchar(50)'),
173 @IDPodkategorija
174 FROM @data2.nodes('/Kategorija/Potkategorija/Proizvod') AS Tablica(Stupac)
175
176
177/*Napišite proceduru koja u jednom pozivu omogućuje brisanje proizvoljnog broja kreditnih kartica prema proslijeđenim ID-evima. */
178CREATE TYPE IDs AS TABLE
179(
180 Id int
181)
182GO
183DROP PROCEDURE dbo.CreditCardDelete
184CREATE PROCEDURE dbo.CreditCardDelete
185 @data IDs READONLY
186AS
187DELETE FROM Stavka WHERE RacunID IN (
188 SELECT IDRacun FROM Racun
189 WHERE KreditnaKarticaID IN (
190 SELECT t.Id FROM @data AS t
191 )
192)
193DELETE FROM Racun WHERE KreditnaKarticaID IN (
194 SELECT t.Id FROM @data AS t
195
196)
197DELETE FROM KreditnaKartica WHERE IDKreditnaKartica IN (
198 SELECT t.Id FROM @data AS t
199)
200
201
202DECLARE @data IDs
203INSERT INTO @data(Id)
204VALUES(4),(6)
205EXEC dbo.CreditCardDelete @data
206
207
208
209/*
210Napisati proceduru koja prima JSON dokument oblika:
211
212N‘ { "OSOBE":
213 [ { "OSOBA":
214 { "idosoba": 2, "ime": "Iva", "prezime": "Ivić", "ostalo":
215 {"email": "iva.ivic@algebra.hr", "telefon": "091 222 3333” } } } ] } '
216
217Neka procedura vrati tablicu s imenima, prezimenima i telefonskim brojevima osoba.
218Pozvati proceduru s gornjim parametrom.
219*/
220 "OSOBE":
221 [
222 {
223 "OSOBA":
224 {
225 "idosoba": 2,
226 "ime": "Iva",
227 "prezime": "Ivić",
228 "ostalo":
229 {
230 "email": "iva.ivic@algebra.hr",
231 "telefon": "091 222 3333”
232 }
233 }
234 }
235 ]
236}
237
238CREATE PROC ReadJson
239 @json nvarchar(max)
240AS
241 SELECT ime, prezime, telefon, hrana
242 FROM openjson(@json, '$.OSOBE')
243WITH
244(
245 Ime nvarchar(50) '$.OSOBA.ime',
246 Prezime nvarchar(50) '$.OSOBA.prezime',
247 Telefon nvarchar(50) '$.OSOBA.ostalo.telefon',
248 Hrana nvarchar(50) '$.hrana.[0]'
249)
250
251declare @json nvarchar(max)
252set @json=
253N'{"OSOBE":
254 [
255 {
256 "OSOBA":
257 {
258 "idosoba": 2,
259 "ime": "Iva",
260 "prezime": "Ivić",
261 "ostalo":
262 {
263 "email": "iva.ivic@algebra.hr",
264 "telefon": "091 222 3333"
265 }
266 }
267 },
268 "hrana": [
269 {
270 "name": "banana"
271 }
272 ]
273 ]
274}'
275
276exec ReadJson @json
277
278create proc p12
279 @json nvarchar(max)
280as
281select ime, prezime, telefon
282from openjson(@json, '$.OSOBE')
283with
284(
285 Ime nvarchar(50) '$.OSOBA.ime',
286 Prezime nvarchar(50) '$.OSOBA.prezime',
287 Telefon nvarchar(50) '$.OSOBA.ostalo.telefon'
288)
289go
290
291declare @json nvarchar(max)
292set @json=
293N'{"OSOBE":
294 [
295 {"OSOBA":
296 {"idosoba": 2,
297 "ime": "Iva",
298 "prezime": "Ivić",
299 "ostalo":
300 {"email": "iva.ivic@algebra.hr",
301 "telefon": "091 222 3333"}}}]}'
302exec p12 @json
303
304
305
306/* ostatci ostataka */
307/*11. Procedura koja prima ime i prezime komercijalista i ubacuje novoga, kroz izlazni parametar
308vraća novonastali id, odnosno -1 ukoliko isti već postoji (pa ga se ni ne mora ubacivat)*/
309
310create proc UbaciKomarcijalista
311 @ime nvarchar(50),
312 @prezime nvarchar(50),
313 @idKomercijalista int output
314as
315if exists (select IDKomercijalist from Komercijalist where Ime = @ime and Prezime = @prezime) begin
316 set @idKomercijalista = -1
317end
318else begin
319 insert into Komercijalist (Ime, Prezime)
320 values (@ime, @prezime)
321 set @idKomercijalista = SCOPE_IDENTITY()
322end
323go
324
325declare @idKomercijalista int
326execute UbaciKomarcijalista 'Isus', 'Krist', @idKomercijalista output
327print @idKomercijalista
328execute UbaciKomarcijalista 'Isus', 'Krist', @idKomercijalista output
329print @idKomercijalista
330go
331
332/*12.Procedura prima ID proizvoda, provjerava postoji li i je li kad prodan, preko return mora vratit
333sljedeće vrijednosti -1 (ne postoji), 0 (postoji, nikad prodan) 1 (postoji i prodavan n puta)*/
334
335create proc ProvjeriProizvod
336 @idProizvod int
337as
338if not exists (select Naziv from Proizvod where IDProizvod = @idProizvod)
339begin
340 return -1
341end
342if @idProizvod IN (select p.IDProizvod from Proizvod as p
343where (select sum(Kolicina) from Stavka where ProizvodID = p.IDProizvod) IS NULL)
344begin
345 return 0
346end
347 return 1
348
349
350declare @ajdi int = 1001
351declare @rezultat int
352-- postojeći, nikad prodani proizvod
353exec @rezultat = ProvjeriProizvod @ajdi
354print @rezultat
355-- postojeći prodavani proizvod
356set @ajdi = 707
357exec @rezultat = ProvjeriProizvod @ajdi
358print @rezultat
359-- nepostojeći proizvod
360set @ajdi = 20000
361exec @rezultat = ProvjeriProizvod @ajdi
362print @rezultat
363
364select * from proizvod
365where (select sum(Kolicina) from Stavka where ProizvodID = IDProizvod) IS NOT NULL
366
367/*13. Implementirajte CRUD na Potkategorija s 2 procedure (C,U) i (R,D)
368Napravite umetanje, izmjenu, dohvaćanje i brisanje jedne potkategorije*/
369
370create proc CU_Potkategorija
371 @idPotkategorije int output,
372 @naziv nvarchar(50),
373 @idKategorija int
374as
375if exists (select * from Potkategorija where IDPotkategorija = @idPotkategorije) begin
376 update Potkategorija
377 set Naziv = @naziv, KategorijaID = @idKategorija
378 where IDPotkategorija = @idPotkategorije
379end
380else begin
381 insert into Potkategorija (Naziv, KategorijaID)
382 values (@naziv, @idKategorija)
383 set @idPotkategorije = SCOPE_IDENTITY()
384end
385
386declare @noviAjdi int
387exec CU_Potkategorija @noviAjdi output, 'ZaPuknutLanac',4
388print @noviAjdi
389select * from Potkategorija where IDPotkategorija = @noviAjdi
390
391declare @noviAjdi int
392exec CU_Potkategorija @noviAjdi output, 'KljucZaLanac', 4
393select * from Potkategorija where IDPotkategorija = @noviAjdi
394
395
396
397create proc RD_Potkategorija
398 @ajdiPostojeci int,
399 @operacija char = 'R'
400as
401if @operacija = 'R' begin
402 select
403 *
404 from Potkategorija
405 where IDPotkategorija = @ajdiPostojeci
406end
407else if @operacija = 'D' begin
408 print 'Brise se potkategorija: ' + (select Naziv from Potkategorija where IDPotkategorija = @ajdiPostojeci)
409 delete from Potkategorija
410 where IDPotkategorija = @ajdiPostojeci
411end
412
413declare @ajdiPostojeci int
414set @ajdiPostojeci = (select IDPotkategorija from Potkategorija where Naziv = 'KljucZaLanac')
415select * from Potkategorija where IDPotkategorija = @ajdiPostojeci
416exec RD_Potkategorija @ajdiPostojeci
417exec RD_Potkategorija @ajdiPostojeci, 'R'
418exec RD_Potkategorija @ajdiPostojeci, 'D'
419select * from Potkategorija where IDPotkategorija = @ajdiPostojeci
420
421-----------------
422create proc spZad1
423 @idkupac int output,
424 @ime nvarchar(50),
425 @prezime nvarchar(50),
426 @email nvarchar(50),
427 @telefon nvarchar(50)
428as
429if not exists(select * from Kupac where @ime = Ime and @prezime = Prezime)
430 begin
431 insert into Kupac(Ime, Prezime, Email, Telefon) values(@ime, @prezime, @email, @telefon)
432 set @idkupac = SCOPE_IDENTITY()
433 return 1
434 end
435else
436 begin
437 select @idkupac= IDKupac from Kupac where @ime = Ime and @prezime = Prezime
438 return 0
439 end
440
441declare @id int
442declare @vratila int
443exec @vratila = pZad1 @id output,'Petar', 'Hara', 'petarhara@com','05215125'
444print @id
445print @vratila
446
447/*Napišite proceduru koja prima naziv
448potkategorije i ID kategorije, umeće novu
449potkategoriju za tu kategoriju u tablicu
450Potkategorija i kroz izlazni parametar vraća
451vrijednost primarnog ključa umetnutog
452retka. Ako već postoji potkategorija zadanog
453imena za tu kategoriju, ne treba je upisivati
454ponovno i u tom slučaju kroz izlazni
455parametar vratite vrijednost -1. Pozovite
456proceduru dva puta s istim nazivom
457potkategorije i ID-om kategorije te ispišite
458vraćenu vrijednost. */
459
460create proc spKategorija
461 @nazivPodkategorije nvarchar(255),
462 @IDkategorija int,
463 @ID int output
464as
465if exists (select * from Potkategorija where @nazivPodkategorije = Naziv)
466 begin
467 SET @ID = -1
468 end
469else
470 begin
471 insert into Potkategorija(KategorijaID, Naziv) values(@IDkategorija,@nazivPodkategorije)
472 SET @ID = SCOPE_IDENTITY()
473 end
474
475declare @ID int
476exec procKategorija @nazivPodkategorije='ba',@IDkategorija= 1, @ID= @ID output
477print @ID
478
479drop proc spKategorija
480
481/*Implementirajte CRUD operacije na tablici
482Kategorija, ako znate da će se baza podataka
483koristiti i iz programskog jezika koji ne
484podržava rad s funkcijama na bazi podataka.
485Demonstrirajte korištenje napravljenih
486objekata.*/
487
488create proc spSelectKategorija
489as
490select * from Kategorija
491
492exec spSelectKategorija
493
494create proc spInsertKategorija
495 @Naziv nvarchar(255)
496as
497insert into Kategorija(Naziv) values(@Naziv)
498
499exec spInsertKategorija 'Mobiteli'
500
501create proc spUpdateKategorija
502 @IDKategorija int,
503 @Naziv nvarchar(255)
504as
505update Kategorija
506set Kategorija.Naziv = @Naziv
507where Kategorija.IDKategorija = @IDKategorija
508
509exec spUpdateKategorija 7, 'IPhone'
510
511create proc spDeleteKategorija
512 @IDKategorija int
513as
514delete from Kategorija
515where Kategorija.IDKategorija = @IDKategorija
516
517exec spDeleteKategorija 7
518
519/*Napišite proceduru koja prima kriterij po kojemu ćete filtrirati prezimena iz tablice Kupac.
520Neka procedura pomoću izlaznog parametra vrati broj zapisa koji zadovoljavaju zadani kriterij.
521Neka procedura vrati i sve zapise koji zadovoljavaju kriterij.
522Pozovite proceduru i ispišite vraćenu vrijednost.
523Uklonite proceduru.*/
524
525CREATE PROC p13
526 @Filter nvarchar(50),
527 @BrojZapisa int OUTPUT
528AS
529SELECT @BrojZapisa = COUNT(*) FROM Kupac WHERE Prezime LIKE @Filter
530SELECT * FROM Kupac WHERE Prezime LIKE @Filter
531GO
532
533DECLARE @Cnt int
534EXEC p13 '%hu%', @Cnt OUTPUT
535PRINT @Cnt
536
537/*Napišite proceduru koja za zadanog komercijalistu pomoću izlaznih parametara vraća njegovo ime
538i prezime te ukupnu zarađenu količinu novaca.*/
539CREATE PROC p14
540 @KomercijalistID int,
541 @Ime nvarchar(50) OUTPUT,
542 @Prezime nvarchar(50) OUTPUT,
543 @Zaradio money OUTPUT
544AS
545SELECT @Ime = Ime, @Prezime = Prezime
546FROM Komercijalist
547WHERE IDKomercijalist = @KomercijalistID
548
549SELECT @Zaradio = SUM(s.UkupnaCijena)
550FROM Racun AS r
551INNER JOIN Stavka AS s ON r.IDRacun = s.RacunID
552WHERE r.KomercijalistID = @KomercijalistID
553GO
554
555DECLARE @Ime nvarchar(50), @Prezime nvarchar(50), @Zaradio money
556EXEC p14 276, @Ime OUTPUT, @Prezime OUTPUT, @Zaradio OUTPUT
557PRINT @Ime
558PRINT @Prezime
559PRINT @Zaradio
560
561/*Napišite funkciju koja prima ID proizvoda i dohvaća broj prodanih primjeraka.
562Pozovite funkciju samostalno.
563Dohvatite nazive i boje svih proizvoda i uz svaki proizvoda
564ispišite koliko primjeraka je prodano. Promijenite funkciju tako da vrati 0 za one proizvode koji nisu prodani
565niti u jednom primjerku.*/
566
567create FUNCTION UkupnaKolicina
568(
569 @ID int
570)
571RETURNS int
572AS
573BEGIN
574 DECLARE @Ukupno int
575 SELECT @Ukupno = Sum(Kolicina) FROM Stavka WHERE ProizvodID = @ID
576 RETURN @Ukupno
577END
578GO
579
580DECLARE @Rez int
581SET @Rez = dbo.UkupnaKolicina(776)
582PRINT @Rez
583
584SELECT
585 Naziv,
586 Boja,
587 dbo.UkupnaKolicina(IDProizvod) AS Prodano
588FROM Proizvod
589GO
590
591ALTER FUNCTION UkupnaKolicina
592(
593 @ID int
594)
595RETURNS int
596AS
597BEGIN
598 DECLARE @Ukupno int
599
600 SELECT @Ukupno = Sum(Kolicina) FROM Stavka WHERE ProizvodID = @ID
601
602 RETURN CASE
603 WHEN @Ukupno IS NOT NULL THEN @Ukupno
604 ELSE 0
605 END
606END
607
608/*Napišite jednostavnu tabličnu funkciju koja prima dva datuma.
609Neka funkcija vrati broj računa, datum izdavanja i ime i prezime kupca za sve račune izdane između zadanih datuma.
610Iskoristite funkciju za dohvat računa između 01.06.2004. i 03.06.2004.
611Promijenite funkciju da datum vrati u hrvatskom formatu.*/
612
613CREATE FUNCTION DohvatiRacune
614(
615 @D1 datetime,
616 @D2 datetime
617)
618RETURNS TABLE
619AS
620RETURN
621 SELECT r.BrojRacuna, r.DatumIzdavanja, k.Ime, k.Prezime
622 FROM Racun AS r
623 LEFT JOIN dbo.Kupac AS k ON r.KupacID = k.IDKupac
624 WHERE r.DatumIzdavanja BETWEEN @D1 AND @D2
625GO
626
627SELECT * FROM DohvatiRacune('20040601', '20040603')
628GO
629
630ALTER FUNCTION DohvatiRacune
631(
632 @D1 datetime,
633 @D2 datetime
634)
635RETURNS TABLE
636AS
637RETURN
638 SELECT r.BrojRacuna, CONVERT(char(10), r.DatumIzdavanja, 104) AS DatumIzdavanja, k.Ime, k.Prezime
639 FROM Racun AS r
640 LEFT JOIN dbo.Kupac AS k ON r.KupacID = k.IDKupac
641 WHERE r.DatumIzdavanja BETWEEN @D1 AND @D2
642GO
643
644SELECT * FROM DohvatiRacune('20040601', '20040603')
645
646
647/*Napišite složenu tabličnu funkciju koja prima cijenu.
648Ako je cijena NULL, vratite nazive i cijene svih proizvoda iz tablice Proizvod.
649Ako nije, vratite nazive i cijene samo onih proizvoda čija cijena je veća od zadane cijene.
650Iskoristite funkciju s NULL i s cijenom od 3000*/
651
652CREATE FUNCTION F4
653(
654 @Cijena money
655)
656RETURNS @rez TABLE ( Naziv nvarchar(50), Cijena money )
657AS
658BEGIN
659 IF @Cijena IS NULL BEGIN
660 INSERT INTO @rez (Naziv, Cijena)
661 SELECT Naziv, CijenaBezPDV FROM Proizvod
662 END
663 ELSE BEGIN
664 INSERT INTO @rez (Naziv, Cijena)
665 SELECT Naziv, CijenaBezPDV FROM Proizvod WHERE CijenaBezPDV > @Cijena
666 END
667
668 RETURN
669END
670GO
671
672SELECT * FROM F4(NULL)
673SELECT * FROM F4(3000)
674
675drop function f4
676
677/* Dohvatite naziv i cijene svih proizvoda.
678Za cijene koje su ispod 1000, napišite “Jeftino”, između 1000 i 2000
679napišite “Prihvatljivo”, za sve ostale napišite “Skupo”. */
680
681SELECT
682 Naziv,
683 CASE
684 WHEN CijenaBezPDV < 1000 THEN 'Jeftino'
685 WHEN CijenaBezPDV BETWEEN 1000 AND 2000 THEN 'Prihvatljivo'
686 ELSE 'Skupo'
687 END AS Procjena
688FROM Proizvod
689