segunda-feira, 3 de outubro de 2016

MySQL - como forçar uma exceção em uma procedure

Forçar uma exceção no MySQL não é uma tarefa simples como no SQL Server, onde você apenas chama a função RAISERROR.

1) Criar uma procedure MY_EXCEPTION que irá receber a mensagem de erro para forçar a exceção

DROP PROCEDURE IF EXISTS MY_EXCEPTION;

DELIMITER $$
-- Procedure para ser chamada com objetivo de causar exceção
CREATE PROCEDURE MY_EXCEPTION (error_text varchar(2000))
BEGIN
    SET @sql = error_text;
    PREPARE MY_SIGNAL_STMT FROM @sql;
    EXECUTE MY_SIGNAL_STMT;
    DEALLOCATE PREPARE MY_SIGNAL_STMT;
END
$$

2) Chamando a procedure

Dentro da sua procedure, faça a checagem que precisa fazer e dentro do seu IF chame a procedure

if (v_valor = 0) then
--  ROLLBACK;  -- utilize primeiro o Rollback, caso você esteja com um BEGIN TRAN aberto

-- Aqui você chama a procedure criada, passando a mensagem que deseja exibir
 CALL MY_EXCEPTION ('O valor não pode ser zero');

end if;


3) Tratamento para erros não previstos
Caso você esteja com um BEGIN TRAN aberto, é importante também incluir um tratamento para as exceções não tratadas. Para isso, utilize o comando abaixo, que fará um rollback em case de erro.

    BEGIN
        DECLARE EXIT HANDLER FOR SQLEXCEPTION ROLLBACK;           
   
    END;







Nenhum comentário: