Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Instrução MYSQL If na transação causando erro


O MySQL não reconhece uma instrução começando com a palavra-chave IF como uma instrução SQL válida.

O IF A instrução funciona apenas no contexto de uma instrução composta (ou seja, um bloco de instruções entre BEGIN e END . Atualmente, a instrução composta é suportada apenas no contexto de um programa armazenado (procedimento armazenado, função ou gatilho).

http://dev.mysql.com/doc/refman /5.5/en/begin-end.html

Para testar, tente...
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:não estou defendendo aqui que as transações sejam tratadas dentro do procedimento armazenado. Minha preferência pessoal é NÃO fazer isso e, em vez disso, lidar com transações em um nível mais alto. Mas o exemplo acima deve funcionar; acredito que o MySQL suporta a chamada START TRANSACTION , COMMIT e ROLLBACK no contexto de um procedimento armazenado.)