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çãoDROP 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
-- 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;
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:
Postar um comentário