• 0
Sign in to follow this  
neibala

Pegar o código e a descrição de um erro dentro de uma stored Procedure

Question


Pessoal

          Como estou utilizando o comando abaixo e está funcionando corretamente, só que estou precisando pegar o código de erro e também a descrição do erro, como devo fazer para pegar essas informações dentro de uma stored procedure ?


declare pv_ic_Error smallint default 0;
declare continue handler FOR SQLEXCEPTION set pv_ic_Error = 1;


Estou utilizando o MySQL 5.5.20

Share this post


Link to post
Share on other sites

1 answer to this question

Recommended Posts

  • 0

Abaixo segue um exemplo de uma storage procedure que uso em meus sistemas:

DELIMITER $$

USE `meubancodedados`$$

DROP PROCEDURE IF EXISTS `minhaprocedure_crud`$$

CREATE DEFINER=`root`@`localhost` PROCEDURE `minhaprocedure_crud`(IN Acao CHAR(1), IN pidCampo INTEGER, IN pnmCampo VARCHAR(50), IN 
   pidUsuarioRespInclusao INTEGER, IN pidUsuarioRespAlteracao INTEGER)
BEGIN
   DECLARE msg VARCHAR(1000) DEFAULT "MySQL: Sem mensagem";
   DECLARE excecao SMALLINT DEFAULT 0;
   DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET excecao = 1;
   IF pnmCampo = "" OR (Acao <> "I" AND pidCampo = 0) THEN
      SET msg = "MySQL: Erro na passagem de parametros";
   ELSE
      START TRANSACTION;
      /*Inclusao*/
      IF Acao = "I" THEN
         INSERT INTO minhaTabela(nmCampo, idUsuarioRespInclusao, dhInclusaoInformacao)
         VALUES (pnmCampo, pidUsuarioRespInclusao, NOW());
         IF excecao = 1 THEN
            SET msg = "MySQL: Erro ao inserir na tabela de minhaTabela";
            ROLLBACK;
         END IF;
      END IF;
   
      IF excecao <> 1 THEN
         IF Acao <> "I" THEN
            SET @idCampo = pidCampo;
         END IF;
         /*Alteracao*/
         IF Acao = "A" THEN
            UPDATE minhaTabela
            SET nmCampo = pnmCampo,
                idUsuarioRespAlteracao = pidUsuarioRespAlteracao
            WHERE idCampo = @idCampo;
            IF excecao = 1 THEN
               SET msg = "MySQL: Erro ao atualizar minhaTabela";
               ROLLBACK;
            END IF;
         END IF;
      END IF;
      /*Exclusao*/
      IF excecao <> 1 THEN
         IF Acao = "E" THEN
            DELETE FROM minhaTabela
            WHERE idCampo = @idCampo;
            IF excecao = 1 THEN
               SET msg = "MySQL: Erro ao excluir minhaTabela";
               ROLLBACK;
            END IF;
         END IF;
      END IF;
        
      /*Se tudo deu certo, então finaliza confirmando a gravacao.*/
      IF excecao <> 1 THEN
         COMMIT;
         IF Acao = "I" THEN
            SET msg = "MySQL: minhaTabela Incluido com sucesso";
         ELSE
            IF Acao = "A" THEN
               SET msg = "MySQL: minhaTabela Alterado com sucesso";
            ELSE
               SET msg = "MySQL: minhaTabela Excluido com sucesso";
            END IF;
         END IF;
      END IF;
   END IF;
   SELECT msg AS msg;
END$$

DELIMITER ;

 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this