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