· 8 years ago · Nov 15, 2017, 11:48 AM
1DELIMITER //
2CREATE FUNCTION danUTjednu() RETURNS VARCHAR(50)
3DETERMINISTIC
4BEGIN
5 DECLARE vrati VARCHAR(50);
6 CASE DAYOFWEEK(CURDATE())
7 WHEN 2 THEN SET vrati = 'Danas je ponedjeljak';
8 WHEN 3 THEN SET vrati = 'Danas je utorak';
9 WHEN 4 THEN SET vrati = 'Danas je srijeda';
10 WHEN 5 THEN SET vrati = 'Danas je Äetvrtak';
11 WHEN 6 THEN SET vrati = 'Danas je petak';
12 ELSE SET vrati = 'Danas je vikend';
13 END CASE;
14 RETURN vrati;
15END; //
16DELIMITER ;
17SELECT daniUTjednu();
18
19
20DELIMITER $$
21CREATE PROCEDURE proc()
22BEGIN
23 DECLARE var INT;
24 SET var = 1;
25 WHILE var <= 5 DO
26 SET var = var + 1;
27 SELECT var;
28 END WHILE;
29END; $$
30DELIMITER ;
31CALL proc();
32
33
34DROP PROCEDURE proc;
35DELIMITER $$
36CREATE PROCEDURE proc()
37BEGIN
38 DECLARE var INT;
39 SET var = 1;
40 REPEAT
41 SET var = var + 1;
42 SELECT var;
43 UNTIL var > 5
44 END REPEAT;
45END; $$
46DELIMITER ;
47CALL proc();
48
49
50/* PETLJE - leave(break), iterate(continue) */
51
52DROP PROCEDURE proc;
53DELIMITER $$
54CREATE PROCEDURE proc()
55BEGIN
56 DECLARE var INT;
57 SET var = 1;
58 petlja:LOOP
59 SET var = var + 1;
60 SELECT var;
61 IF var > 5 THEN
62 LEAVE petlja;
63 END IF;
64 END LOOP;
65END; $$
66DELIMITER ;
67CALL proc;
68
69
70/* procedura koja će ispisati prvih n prirodnih brojeva u jednoj varijabli, neka budu odvojeni zarezom */
71
72DELIMITER $$
73DROP PROCEDURE IF EXISTS WhileLoopProc$$
74CREATE PROCEDURE WhileLoopProc(IN n INT)
75BEGIN
76 DECLARE var INT DEFAULT NULL;
77 DECLARE str VARCHAR(255) DEFAULT NULL;
78 SET var = 1;
79 SET str = '';
80 WHILE var <= n DO
81 SET str = CONCAT(str, var, ',');
82 SET var = var + 1;
83 END WHILE;
84 SELECT str;
85END; $$
86DELIMITER ;
87CALL WhileLoopProc(8);
88
89
90/* procedura koja za zadani odjel vraća broj radnika koji pripadaju tom odjelu, ako ima više od 10 radnika nek vrati -1, ako nema radnika onda 0 */
91
92DELIMITER //
93CREATE PROCEDURE odjel_rad(IN zadaniOdjel INT, OUT broj INT)
94BEGIN
95 SELECT COUNT(*) INTO broj FROM radnik WHERE sifOdjel = zadaniOdjel;
96 IF broj > 10 THEN
97 SET broj = -1;
98 ELSEIF broj = 0 THEN
99 SET broj = 0;
100 END IF;
101END; //
102DELIMITER ;
103CALL odjel_rad(100005, @a);
104SELECT @a;
105
106
107/* funkcija za unos novog odjela u bazu, prvo treba provjeriti dal postoji taj odjel, ako postoji vraća 0; */
108
109DELIMITER //
110DROP FUNCTION IF EXISTS unesiOdjel//
111CREATE FUNCTION unesiOdjel(noviodjel VARCHAR(50)) RETURNS INT
112DETERMINISTIC
113BEGIN
114 DECLARE broj, vrati, zadnji INT DEFAULT NULL;
115 SELECT COUNT(*) INTO broj FROM odjel WHERE nazivOdjel = noviOdjel;
116 IF broj = 0 THEN
117 SELECT MAX(sifOdjel) INTO zadnji FROM odjel;
118 INSERT INTO odjel (sifOdjel, nazivOdjel) VALUES ((zadnji+1), noviOdjel);
119 SET vrati = 1;
120 ELSE
121 SET vrati = 0;
122 END IF;
123 RETURN vrati;
124END; //
125DELIMITER ;
126SELECT unesiOdjel('Odjel za reklamacije');
127
128
129/* KURSORI */
130
131/* procedura koja će dohvatiti svaki kvar zasebno i ispisati dal je veliki(satiKvar > 5) ili mali */
132
133DELIMITER $$
134DROP PROCEDURE IF EXISTS etiketiraj$$
135CREATE PROCEDURE etiketiraj()
136BEGIN
137 DECLARE naziv_vrijednost VARCHAR(255);
138 DECLARE sati_vrijednost INT;
139 DECLARE kur CURSOR FOR SELECT nazivKvar, satiKvar FROM kvar;
140 OPEN kur;
141 petlja:LOOP
142 FETCH kur INTO naziv_vrijednost, sati_vrijednost;
143 IF sati_vrijednost > 5 THEN
144 SELECT naziv_vrijednost AS ime, 'veliki' AS velicina;
145 ELSE
146 SELECT naziv_vrijednost AS ime, 'mali' AS velicina;
147 END IF;
148 END LOOP petlja;
149 CLOSE kur;
150END; $$
151DELIMITER ;
152CALL etiketiraj();
153
154
155/* procedura koja će za zadani poštanski broj pronaći sve nazive mjesta u županiji u kojoj se nalazi zadano mjesto */
156
157DELIMITER //
158DROP PROCEDURE IF EXISTS pbr//
159CREATE PROCEDURE pbr(ulaz INT)
160BEGIN
161 DECLARE p_zup INT;
162 DECLARE naziv VARCHAR(50);
163 DECLARE error INT DEFAULT 0;
164 DECLARE kursor CURSOR FOR SELECT nazivMJesto FROM mjesto WHERE mjesto.sifZupanija = p_zup;
165 DECLARE CONTINUE HANDLER FOR NOT FOUND
166 SET error = 1;
167 SELECT sifZupanija INTO p_zup FROM mjesto WHERE mjesto.pbrMjesto = ulaz;
168 OPEN kursor;
169 petlja:LOOP
170 FETCH kursor INTO naziv;
171 IF error = 1 THEN
172 LEAVE petlja;
173 END IF;
174 SELECT naziv;
175 END LOOP;
176 CLOSE kursor;
177END; //
178DELIMITER ;
179CALL pbr(43280);
180
181
182/* privremena tablica
183
184drop temporary table if exists bbzup;
185select create temporary table bbzup(mjesto varchar(50));
186sif zupanija into p_zup from mjesto where mjesto.pbrMjesto = ulaz;
187open kursor;
188petlja:Loop
189 fetch kursor into naziv;
190 if error = 1 then
191 leave petlja;
192 end if;
193 insert into bbzup values(naziv);
194end loop;
195select * from bbzup;
196close kursor;
197end; //
198delimiter ;
199call pbr(43280);*/
200
201
202DELIMITER //
203DROP PROCEDURE IF EXISTS pbr//
204CREATE PROCEDURE pbr(ulaz INT)
205BEGIN
206 DECLARE p_zup INT;
207 DECLARE naziv VARCHAR(50);
208 DECLARE error INT DEFAULT 0;
209 DECLARE kursor CURSOR FOR SELECT nazivMJesto FROM mjesto WHERE mjesto.sifZupanija = p_zup;
210 DECLARE CONTINUE HANDLER FOR NOT FOUND
211 SET error = 1;
212 DROP TEMPORARY TABLE IF EXISTS bbzup;
213 SELECT CREATE TEMPORARY TABLE bbzup(mjesto VARCHAR(50));
214 SELECT sifZupanija INTO p_zup FROM mjesto WHERE mjesto.pbrMjesto = ulaz;
215 OPEN kursor;
216 petlja:LOOP
217 FETCH kursor INTO naziv;
218 IF error = 1 THEN
219 LEAVE petlja;
220 END IF;
221 INSERT INTO bbzup VALUES(naziv);
222 END LOOP;
223 CLOSE kursor;
224END; //
225DELIMITER ;
226CALL pbr(43280);