J'ai une configuration de table MySQL hiérarchique utilisant le modèle Ensemble imbriqué. J'ai créé un proc stocké qui me permet de supprimer une organisation.Erreur MySQL 2014 - Commandes désynchronisées - lors de la tentative d'appel de procédures stockées consécutives
Lorsque je tente de faire des appels consécutifs à la procédure stockée, je reçois l'erreur suivante se référant à la deuxième commande CALL:
2014 - Commandes de synchronisation; vous ne pouvez pas exécuter cette commande maintenant
Voici le SQL que je suis en cours d'exécution:
SELECT @id := id,
@parent_id := parent_id
FROM organization
WHERE name = 'TESTDEAL';
CALL deleteOrg(@id);
CALL deleteOrg(@parent_id);
Et voici ma procédure stockée:
DELIMITER $$
CREATE PROCEDURE deleteOrg(IN IN_ID INT)
MODIFIES SQL DATA
BEGIN
START TRANSACTION;
SELECT @org_id := id,
@myLeft := lft,
@myRight := rgt,
@myWidth := rgt - lft + 1
FROM organization
WHERE id = IN_ID;
# delete statements for removing roles and other dependencies
DELETE FROM organization
WHERE id = @org_id;
UPDATE organization
SET rgt = rgt - @myWidth
WHERE rgt > @myRight;
UPDATE organization
SET lft = lft - @myWidth
WHERE lft > @myRight;
COMMIT;
END;
$$
DELIMITER ;
Pourquoi la deuxième commande manquerais ? Est-ce que MySQL essaie d'exécuter la deuxième commande CALL avant que la première ait été validée? Y a-t-il un moyen de forcer le premier à s'exécuter complètement avant d'appeler le second?
EDIT: table organisation utilise InnoDB
EDIT: J'ai essayé de retirer START TRANSACTION; et COMMIT; mais rencontre toujours la même erreur
Quelle version de MySQL utilisez-vous? –
MySQL version 5.1.41 –