8797 sujets

Développement web côté serveur, CMS

Bonjour pour me faire a l'utilisation des triggers et des procedures je modélise de façon très très simplifier un système bancaire.
En gros ma base de données comporte :
- 2 tables : client et operation.
- 1 trigger : trg_operation.
- procédure : prc_transfert.

Mon trigger vérifie que pour chaque opération le solde du client concerner ne passera pas en négatif.

Ma procédure permet de transférer un montant entre deux clients (débits / crédit).

Voici les codes :

Trigger :

DELIMITER // 
CREATE TRIGGER trg_operation_imp BEFORE INSERT ON operation FOR EACH ROW 
BEGIN 
    DECLARE current_solde INTEGER; 
    DECLARE after_solde INTEGER; 
    SELECT solde_client INTO current_solde FROM client WHERE id_client = new.id_client; 
    SET after_solde = current_solde + new.montant_ope; 
    IF after_solde >= 0 THEN 
        UPDATE client SET solde_client = solde_client + new.montant_ope WHERE id_client = new.id_client; 
    END IF; 
END// 
DELIMITER ; 


Procédure :
CREATE PROCEDURE prc_transfert (IN frm_cli int(3), IN to_cli int(3), IN montant int(11))
BEGIN
DECLARE frm_solde INTEGER;
DECLARE frm_after_solde INTEGER;
DECLARE neg_montant INTEGER;
SELECT solde_client INTO frm_solde FROM client WHERE id_client = frm_cli;
SET frm_after_solde = frm_solde - montant;
SET neg_montant = 0 - montant;
IF frm_after_solde >= 0 THEN
INSERT INTO operation VALUES ('',frm_cli,neg_montant);
INSERT INTO operation VALUES ('',to_cli,montant);
END IF;
END//
DELIMITER ;



Quand je fais un insert into manuel le trigger marche bien.
Quand j'exécute la procédure [ CALL prc_transfert(1,2,800); par exemple] la table opération se met bien a jour avec deux nouvelles lignes mais le trigger ne marche pas (la table client avec le solde ne sont pas mis a jour).


Comment faire pour que le trigger s'exécute sur quand la procédure se lance ?

Merci