Erreur MySQL 2014 - Commandes de synchronisation - lorsque vous essayez d'appeler consécutives stockées procs
J'ai un hiérarchique table MySQL configuration à l'aide de l'Ensemble Imbriqué de modèle. J'ai créé une procédure stockée qui me permet de supprimer une organisation.
Quand j'essaye de faire des appels consécutifs à la procédure stockée, j'obtiens l'erreur suivante se référant à l'APPEL de la deuxième commande:
2014 - Commandes de synchronisation; vous ne pouvez pas exécuter cette commande maintenant
Voici le SQL, 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 d'échouer? Est MySQL qui tente d'exécuter l'APPEL de la deuxième commande avant le premier a été commis? Est il possible que je peux forcer le premier à exécuter pleinement avant l'appel de la deuxième?
EDIT: organisation de la table est à l'aide de InnoDB
EDIT: Essayé de l'enlever START TRANSACTION; et de s'ENGAGER; mais je suis encore en train d'erreur même
- Quelle est la version de MySQL que vous utilisez?
- Version de MySQL 5.1.41
Vous devez vous connecter pour publier un commentaire.
Je suppose que cela pourrait avoir quelque chose à voir avec la façon dont vous êtes l'assignation de vos variables.
Mon conseil est de déclarer les variables locales à l'intérieur de votre procédure, et de les attribuer à l'aide de
SELECT...INTO
. C'est une bonne pratique en général, et peut vous aider avec votre problème.Voici ce que votre procédure ressemblerait à:
L'erreur ne semble se produire lors de l'importation d'un script SQL de phpMyAdmin. Importer le script à partir de la ligne de commande ou en utilisant la ligne de commande n'entraîne pas une erreur. Je suis en supposant que cette erreur a à faire avec phpMyAdmin et non MySQL. (J'ai aussi vu d'autres comportement étrange de phpMyAdmin relatives à des Procédures Stockées - je suis à l'aide de phpMyAdmin v3.3.2)
Je suis à la recherche de la réponse trop, autant que je sache, c'est lié au jeu d'enregistrements retournés par le premier SP. Vous devez "lire" le jeu d'enregistrements pour le vider, puis de faire un nouvel APPEL.