1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
|
DROP FUNCTION bonus_race_proc();
CREATE FUNCTION bonus_race_proc() RETURNS opaque
AS
DECLARE
old_b_intelligence INTEGER := 0;
old_b_vivacite INTEGER := 0;
old_b_force INTEGER := 0;
old_b_endurance INTEGER := 0;
old_b_dexterite INTEGER := 0;
new_b_intelligence INTEGER;
new_b_vivacite INTEGER;
new_b_force INTEGER;
new_b_endurance INTEGER;
new_b_dexterite INTEGER;
BEGIN
-- Verifie que la race a ete modifiee
IF TG_OP = \'UPDATE\' THEN
IF NEW.race = OLD.race THEN
RAISE NOTICE \' bonus_race_proc pas de changement\';
RETURN NEW;
END IF;
END IF;
RAISE NOTICE \' debut bonus_race_proc.\';
-- Supprime les bonus de l ancienne race et ajoute ceux de la nouvelle
IF TG_OP = \'UPDATE\' THEN
SELECT bonusIntelligence,bonusVivacite,bonusForce,bonusEndurance,bonusDexterite
INTO old_b_intelligence,old_b_vivacite,old_b_force,old_b_endurance,old_b_dexterite
FROM Race WHERE cRace = OLD.race;
END IF;
SELECT bonusIntelligence,bonusVivacite,bonusForce,bonusEndurance,bonusDexterite
INTO new_b_intelligence,new_b_vivacite,new_b_force,new_b_endurance,new_b_dexterite
FROM Race WHERE cRace = NEW.race;
UPDATE Perso SET intelligence = intelligence - old_b_intelligence + new_b_intelligence
WHERE nom = NEW.nom;
UPDATE Perso SET force = force - old_b_force + new_b_force WHERE nom = NEW.nom;
UPDATE Perso SET endurance = endurance - old_b_endurance + new_b_endurance WHERE nom = NEW.nom;
UPDATE Perso SET vivacite = vivacite - old_b_vivacite + new_b_vivacite WHERE nom = NEW.nom;
UPDATE Perso SET dexterite = dexterite - old_b_dexterite + new_b_dexterite WHERE nom = NEW.nom;
RAISE NOTICE \' fin bonus_race_proc.\';
RETURN NEW;
END;
LANGUAGE 'plpgsql';
CREATE TRIGGER bonus_race_trig
AFTER INSERT OR UPDATE ON Perso
FOR EACH ROW
EXECUTE PROCEDURE bonus_race_proc(); |
Partager