sql >> Base de Datos >  >> RDS >> Mysql

MYSQL Si la declaración en la transacción causa un error

MySQL no reconoce una declaración que comienza con la palabra clave IF como una instrucción SQL válida.

El IF funciona solo en el contexto de una declaración compuesta (es decir, un bloque de declaraciones encerrado entre BEGIN y END . Actualmente, la instrucción compuesta solo se admite en el contexto de un programa almacenado (procedimiento almacenado, función o activador).

http://dev.mysql.com/doc/refman /5.5/es/comienzo-fin.html

Para probar, intente...

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;

(NOTA:no estoy defendiendo aquí que las transacciones se manejen dentro del procedimiento almacenado. Mi preferencia personal es NO hacer esto y, en cambio, manejar las transacciones a un nivel superior. Pero el ejemplo anterior debería funcionar; creo que MySQL admite llamar a START TRANSACTION , COMMIT y ROLLBACK dentro del contexto de un procedimiento almacenado.)