· 8 years ago · Mar 13, 2018, 11:38 AM
11. Zadatak
2
3/* Dodaj atribut u tablicu klijent */
4
5ALTER TABLE klijent ADD dobKlijent INT;
6
7
8
9DROP PROCEDURE IF EXISTS mojaProcedura;
10
11DELIMITER //
12
13/* Ovaj dole if je ako neki klijent nema JMBG*/
14
15CREATE PROCEDURE mojaProcedura(IN sifra INT)
16
17 DETERMINISTIC
18
19 BEGIN
20
21 DECLARE godRodKlijent INT;
22
23 SELECT CONCAT(1,SUBSTR(jmbgKlijent,5,3)) INTO godRodKlijent from klijent where sifKlijent = sifra;
24
25 IF jmbg <> "" THEN
26
27 UPDATE klijent SET dobKlijent = (YEAR(CURDATE()) - godRodKlijent) WHERE sifKlijent = sifra;
28
29 END IF;
30
31 END //
32
33DELIMITER ;
34
35
36
37/* Poziv procedure */
38
39CALL mojaProcedura(1137);
40
41/* Provjera da vidim */
42
43SELECT * from klijent WHERE sifKlijent = 1137;
44
45/********************************************/
46
472.Zadatak
48
49/* RIJEŠENJE BEZ HANDLERA :)))) */
50
51DROP PROCEDURE IF EXISTS dajSvimaTrenutnuDob;
52
53DELIMITER //
54
55CREATE PROCEDURE dajSvimaTrenutnuDob()
56
57 BEGIN
58
59 DECLARE iii,sif, brojKlijenata INT;
60
61 DECLARE jmbg VARCHAR(50);
62
63 DECLARE kursor1 CURSOR FOR SELECT sifKlijent,jmbgKlijent FROM klijent;
64
65 OPEN kursor1;
66
67 SELECT COUNT(sifKlijent) INTO brojKlijenata FROM klijent;
68
69 SET iii = 0;
70
71 WHILE iii < brojKlijenata DO
72
73 FETCH kursor1 INTO sif,jmbg;
74
75 SET iii = iii + 1;
76
77 CALL racunajDobKlijentu(sif);
78
79 END WHILE;
80
81 CLOSE kursor1;
82
83 END //
84
85DELIMITER ;
86
87/* Poziv procedure */
88
89CALL dajSvimaTrenutnuDob();
90
91/* SVE NA NULL DA TESTIRAM */
92
93UPDATE klijent SET dobKlijent=NULL;
94
95/* Provjera da vidim */
96
97SELECT sifKlijent,dobKlijent FROM klijent;
98
99
100
1013.Zadatak
102
103DROP PROCEDURE IF EXISTS unesiKlijenta;
104
105DELIMITER //
106
107CREATE PROCEDURE unesiKlijenta( IN sifKlijenta INT,
108
109 IN imeKlijenta VARCHAR(255),
110
111 IN prezimeKlijenta VARCHAR(255),
112
113 IN pbrKlijenta INT,
114
115 IN pbrRegKlijenta INT,
116
117 IN datUnosKlijenta DATE,
118
119 IN jmbgKlijenta VARCHAR(50),
120
121 OUT poruka VARCHAR(255)
122
123 )
124
125 BEGIN
126
127 DECLARE dobKlijenta INT;
128
129
130
131 INSERT INTO klijent (sifKlijent,imeKlijent,prezimeKlijent,pbrKlijent,pbrReg,datUnosKlijent,jmbgKlijent)
132
133 VALUES(sifKlijenta,imeKlijenta,prezimeKlijenta,pbrKlijenta,pbrRegKlijenta,datUnosKlijenta,jmbgKlijenta);
134
135
136
137 CALL racunajDobKlijentu(sifKlijenta);
138
139 SELECT dobKlijent INTO dobKlijenta FROM klijent WHERE sifKlijent = sifKlijenta;
140
141
142
143 IF dobKlijenta > 17 THEN
144
145 SET poruka = 'Unos izvrsen!';
146
147 COMMIT;
148
149 ELSE
150
151 SET poruka = 'Unos nije izvrsen! Mali klinac';
152
153 ROLLBACK;
154
155 END IF;
156
157 END //
158
159DELIMITER ;
160
161
162
163/* PRIMJER POZIVA FUNKCIJE*/
164
165call unesiKlijenta(4002,'Marko','Markic',10000,10000,CURDATE(),'2911997111111',@por);
166
167SELECT @por;
168
169/* PROVJERA */
170
171SELECT * FROM klijent ORDER BY sifKlijent desc;
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
1892.
190
191/* RIJEŠENJE sa HANDLERom ne dela */
192
193DROP PROCEDURE IF EXISTS dajSvimaTrenutnuDob;
194
195DELIMITER //
196
197CREATE PROCEDURE dajSvimaTrenutnuDob()
198
199 BEGIN
200
201 DECLARE flag BOOL;
202
203 DECLARE iii,sif INT;
204
205 DECLARE jmbg VARCHAR(50);
206
207 DECLARE kursor1 CURSOR FOR SELECT sifKlijent,jmbgKlijent FROM klijent;
208
209 DECLARE CONTINUE HANDLER FOR NOT FOUND SET flag=TRUE;
210
211 SET flag=FALSE;
212
213 OPEN kursor1;
214
215 SET iii = 0;
216
217 petlja:LOOP
218
219 FETCH kursor1 INTO sif,jmbg;
220
221 SET iii = iii + 1;
222
223 IF flag=TRUE THEN
224
225 LEAVE petlja;
226
227 END IF;
228
229 CALL racunajDobKlijentu(sif);
230
231 END LOOP;
232
233 CLOSE kursor1;
234
235 END //
236
237DELIMITER ;
238
239/* Poziv funkcije */
240
241CALL dajSvimaTrenutnuDob();
242
243/* SVE NA NULL DA TESTIRAM */
244
245UPDATE klijent SET dobKlijent=NULL;
246
247/* Provjera da vidim */
248
249SELECT sifKlijent,dobKlijent FROM klijent;