DELIMITER $$ DROP PROCEDURE IF EXISTS `testDB`.`obavi_transakciju` $$ CREATE PROCEDURE `testDB`.`obavi_transakciju`(IN p_oduzmi_id INT, IN p_dodaj_id INT, IN p_iznos DOUBLE, IN p_opis VARCHAR(255), OUT p_poruka VARCHAR(255)) BEGIN DECLARE v_trenutno_stanje DOUBLE(10, 2) DEFAULT 0; BEGIN DECLARE exit HANDLER FOR NOT FOUND SET p_poruka = 'Korisnik nije pronadjen pod zadanim brojem!'; DECLARE exit HANDLER FOR SQLEXCEPTION BEGIN ROLLBACK; SET p_poruka = 'Greska'; END; -- oznaci pocetak transakcije START TRANSACTION; -- provjeri da li korisnik, kojemu se skida sa racuna, postoji i da li -- ima dovoljno love da mu se zadani iznos moze skinuti: SELECT iznos INTO v_trenutno_stanje FROM korisnici WHERE id = p_oduzmi_id; -- ako ima, onda obavi transakciju: IF v_trenutno_stanje > p_iznos THEN UPDATE korisnici SET iznos = iznos - p_iznos WHERE id = p_oduzmi_id; UPDATE korisnici SET iznos = iznos + p_iznos WHERE id = p_dodaj_id; -- sacuvaj informacije o obavljenoj transakciji: INSERT INTO transakcije (id, ovome_oduzmi, ovome_dodaj, iznos, opis_transakcije) VALUES (NULL, p_oduzmi_id, p_dodaj_id, p_iznos, p_opis); ELSE SET p_poruka = 'Korisnik nema dovoljno love'; END IF; END; -- potvrdi unos i oznaci kraj transakcije -- ili ponisti unos IF p_poruka != '' THEN ROLLBACK; ELSE COMMIT; SET p_poruka = 'SUCCESS! Transakcija je uspjesno obavljena'; END IF; SELECT p_poruka; END $$ DELIMITER ;