· 8 years ago · Dec 10, 2017, 08:52 PM
1DELIMITER //
2CREATE PROCEDURE wyplata(budzet float, zawod1 varchar(30))
3
4BEGIN
5 DECLARE peselzmienna varchar(11);
6 DECLARE done INT DEFAULT 0;
7 DECLARE pensja1 float;
8 DECLARE ideks varchar(11);
9DECLARE tranzakcja INT;
10DECLARE i INT;
11
12DECLARE kursor CURSOR FOR
13(SELECT pensja, pesel FROM pracownicy WHERE pracownicy.zawod=zawod1);
14
15 DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
16OPEN kursor;
17SET done = 0;
18SET AUTOCOMMIT=0;
19SET i =0;
20SET tranzakcja = (SELECT COUNT(pensja) FROM pracownicy WHERE pracownicy.zawod=zawod1);
21 DROP TEMPORARY TABLE IF EXISTS wynik;
22 CREATE TEMPORARY TABLE wynik ( pesel varchar(11), wyplacono varchar(11));
23
24 START TRANSACTION;
25
26 myloop: LOOP
27
28 FETCH kursor INTO pensja1, ideks;
29
30 IF done THEN
31 SET done = 0;
32 LEAVE myloop;
33 END IF;
34
35 IF pensja1 <= budzet THEN
36
37 SET budzet = budzet - pensja1 ;
38 SET i = i + 1 ;
39 SET peselzmienna = (SELECT Replace(pracownicy.PESEL, Left(pracownicy.PESEL, 8), "********") AS PESEL FROM pracownicy WHERE pesel=ideks ) ;
40
41
42 INSERT INTO wynik ( `pesel` , `wyplacono`) VALUES(peselzmienna, 'wyplacono');
43
44 END IF;
45
46 END LOOP;
47IF i = tranzakcja THEN COMMIT;
48ELSE ROLLBACK;
49END IF;
50
51CLOSE kursor;
52SELECT * FROM wynik;
53END;//
54DELIMITER ;