· 8 years ago · Dec 11, 2017, 06:36 PM
1
2DELIMITER $$
3DROP PROCEDURE IF EXISTS Wyplata;
4$$
5CREATE PROCEDURE Wyplata(budzet INT, zawod_pracownika VARCHAR(50))
6BEGIN
7 DECLARE done INT DEFAULT FALSE;
8 DECLARE nrpesel CHAR(11);
9 DECLARE nrpracownika CHAR(11);
10 DECLARE Pracownik CURSOR FOR (SELECT PESEL FROM Pracownicy WHERE zawod = zawod_pracownika);
11 DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
12 SET autocommit = 0;
13 START TRANSACTION;
14 DROP TABLE IF EXISTS wynikwyplaty;
15 CREATE TEMPORARY TABLE wynikwyplaty(Identyfikator CHAR(11), Wyplacono CHAR(9));
16 OPEN Pracownik;
17 Petla :LOOP
18 IF done THEN
19 SELECT * FROM wynikwyplaty;
20 LEAVE Petla;
21 END IF;
22 IF budzet < 0 THEN
23 SELECT "Za maly budzet, wyplaty nie zostaly wykonane" AS status_wyplat;
24 ROLLBACK;
25 LEAVE Petla;
26 END IF;
27 FETCH Pracownik INTO nrpesel;
28 IF NOT done THEN
29 SET nrpracownika = CONCAT("********",SUBSTRING(nrpesel, 9, 3));
30 SET @kwota = (SELECT Pensja FROM pracownicy WHERE PESEL = nrpesel);
31 SET budzet=budzet-@kwota;
32 INSERT INTO wynikwyplaty(Identyfikator, Wyplacono) VALUES (nrpracownika, 'wyplacono');
33 END IF;
34 END LOOP;
35 CLOSE Pracownik;
36 COMMIT;
37
38
39END;
40$$
41
42CALL Wyplata(2500000, 'Sprzedawca');