Mysql
 sql >> Base de données >  >> RDS >> Mysql

MYSQL If instruction dans la transaction provoquant une erreur

MySQL ne reconnaît pas une instruction commençant par le mot-clé IF comme une instruction SQL valide.

Le IF L'instruction ne fonctionne que dans le contexte d'une instruction composée (c'est-à-dire un bloc d'instructions entre BEGIN et END . Actuellement, l'instruction composée n'est prise en charge que dans le contexte d'un programme stocké (procédure stockée, fonction ou déclencheur.)

http://dev.mysql.com/doc/refman /5.5/fr/debut-fin.html

Pour tester, essayez...

DELIMITER //

CREATE PROCEDURE usp_test_transaction()
BEGIN
  DECLARE EXIT HANDLER FOR SQLEXCEPTION ROLLBACK;
  START TRANSACTION;

  -- whatever DML operations and SELECT statements you want to perform go here

  IF (1=1) THEN
    COMMIT;
  ELSE
    ROLLBACK;
  END IF;
END//

DELIMITER ;

CALL usp_test_transaction;

(REMARQUE :je ne préconise pas ici que les transactions soient gérées à l'intérieur d'une procédure stockée. Ma préférence personnelle est de NE PAS le faire, et plutôt de gérer les transactions à un niveau supérieur. Mais l'exemple ci-dessus devrait fonctionner ; je pense que MySQL prend en charge l'appel de START TRANSACTION , COMMIT et ROLLBACK dans le contexte d'une procédure stockée.)