J'essaie de modifier ma procédure stockée MySQL et de la rendre transactionnelle. La procédure stockée existante fonctionne correctement sans problème, mais dès que je la rend transactionnelle, elle ne me permet même pas d'enregistrer mes modifications. J'ai vérifié la documentation MySQL et recherché en ligne mais je ne trouve aucun problème avec mon code. Cela semble assez simple, mais je ne peux pas le comprendre.
BEGIN
DECLARE poid INT;
DECLARE EXIT HANDLER FOR SQLEXCEPTION SQLWARNING
BEGIN
ROLLBACK;
END
START TRANSACTION;
-- ADD option 5
INSERT INTO product_option(product_id,option_id,required) VALUES(insertedProductID,5,0);
SET poid = (SELECT LAST_INSERT_ID());
INSERT INTO product_option_value(product_option_id,product_id,option_id,option_value_id,quantity,subtract,price,price_prefix,points,points_prefix,weight,weight_prefix) VALUES(poid,insertedProductID,5,50,0,0,4.99,'+',0,'+',0,'+');
-- ADD option 12
INSERT INTO product_option(product_id,option_id,required) VALUES(insertedProductID,12,1);
-- ADD option 13
INSERT INTO product_option(product_id,option_id,required) VALUES(insertedProductID,13,0);
COMMIT;
END
une idée ?
Deux erreurs de syntaxe:
Vous avez besoin de virgules entre les conditions de votre gestionnaire de sortie. Remarquez que la documentation de la syntaxe montre des virgules.
Vous devez terminer le END
du gestionnaire de sortie par un point-virgule. L'instruction DECLARE
elle-même (y compris son bloc BEGIN ... END) est une instruction comme les autres et doit avoir un terminateur.
Vous avez donc besoin de ceci:
DECLARE EXIT HANDLER FOR SQLEXCEPTION, SQLWARNING
BEGIN
ROLLBACK;
END;
Essayez comme ceci, c'est-à-dire, incluez votre instruction Declare
dans le START TRANSACTION;
. Auparavant, votre ROLLBACK
ne faisait pas partie de TRANSACTION
comme vous l'avez écrit au-dessus du START TRANSACTION
: -
BEGIN
START TRANSACTION;
DECLARE poid INT;
DECLARE EXIT HANDLER FOR SQLEXCEPTION, SQLWARNING
BEGIN
ROLLBACK;
END
-- ADD option 5
INSERT INTO product_option(product_id,option_id,required) VALUES(insertedProductID,5,0);
SET poid = (SELECT LAST_INSERT_ID());
INSERT INTO product_option_value(product_option_id,product_id,option_id,option_value_id,quantity,subtract,price,price_prefix,points,points_prefix,weight,weight_prefix) VALUES(poid,insertedProductID,5,50,0,0,4.99,'+',0,'+',0,'+');
-- ADD option 12
INSERT INTO product_option(product_id,option_id,required) VALUES(insertedProductID,12,1);
-- ADD option 13
INSERT INTO product_option(product_id,option_id,required) VALUES(insertedProductID,13,0);
COMMIT;
END