Bonjour,

J'ai écrit une procédure stockée dans laquelle mes requêtes sont encadrées par un "START TRANSACTION" et "COMMIT"/"ROLLBACK".

J'aimerais appeler plusieurs fois cette procédure en l'encadrant elle aussi par un "START TRANSACTION" et "COMMIT"/"ROLLBACK" de telle manière à ce que, si une erreur se produit dans la transaction parente, aucune modification n'est faite sur la base, malgré le "COMMIT" dans la procédure stockée.

Exemple :
Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
DELIMITER //
 
-- la procédure stockée
CREATE PROCEDURE maProcedure(des paramètres...)
BEGIN
    START TRANSACTION;
 
    -- requêtes...
 
    COMMIT;
END//
 
 
START TRANSACTION;
    CALL maProcedure(...);
    CALL maProcedure(...); -- imaginons que cet appel lève une erreur : aucune modification ne devrait être enregistrée en base malgré le COMMIT présent dans maProcedure()
    CALL maProcedure(...);
COMMIT;

Selon la documentation officielle, il n'est pas possible de faire des transactions imbriquées avec MySQL. Cependant, j'ai vu sur un forum (dont je ne me souviens plus de l'adresse ) qu'il était possible d'utiliser un framework pour contourner cette restriction. Avez-vous des informations là-dessus ? Sinon, avez-vous une autre solution ?

Merci