1
resposta

[Dúvida] Duvida sobe o uso mais eficaz!

Mestres, boa notie. O uso como o professor sugeriu, me pareceu que sempre vai surgir o select no final com a msgErro, ou vazia ou com a msg de erro. Estou errado? Meus testes dizem que não, mas aguardo orientação! Seguindo essa linha de raciocínio, decidi fazer um caso diferente. Obviamente como se trata de uma empresa, todos os sabores estariam listado, caso não houvesse, *o mais correto seria colocar no ELSE um select com a mensagem de erro. *

NÃO?

1 resposta

Olá Ruan, tudo bem?

Desculpe pela demora em obter retorno.

A variável msgErro será preenchida apenas se ocorrer um erro do tipo 1339 durante a execução do procedimento armazenado. Caso contrário, a variável permanecerá vazia. O select final irá retornar o valor da variável msgErro, se ela tiver sido preenchida, ou retornará uma string vazia, caso contrário.

Caso ocorra um erro do tipo 1339, a variável msgErro será preenchida com a mensagem de erro correspondente e o select final irá retornar essa mensagem. Portanto, o resultado final dependerá da ocorrência ou não de erros durante a execução do procedimento armazenado.

Quanto a sua alternativa de usar um ELSE e um selectcom a mensagem de erro, ela também seria viável, e também satisfaria o objetivo de apresentar uma mensagem caso o sabor não estivesse listado no case.

O código ficaria assim:

USE `sucos_vendas`$$
CREATE  PROCEDURE `acha_tipo_sabor_erro2`(vProduto VARCHAR(50))
BEGIN
  DECLARE vSabor VARCHAR(50);
  DECLARE vTipoSabor VARCHAR(50);
  SELECT SABOR INTO vSabor FROM tabela_de_Produtos
  WHERE codigo_do_produto = vProduto;
  CASE vSabor
    WHEN 'Lima/Limão' THEN SET vTipoSabor = 'Cítrico';
    WHEN 'Laranja' THEN SET vTipoSabor = 'Cítrico';
    WHEN 'Morango/Limão' THEN SET vTipoSabor = 'Cítrico';
    WHEN 'Uva' THEN SET vTipoSabor = 'Neutro';
    WHEN 'Morango' THEN SET vTipoSabor = 'Neutro';
    ELSE SET vTipoSabor = 'Sabor não encontrado na lista de produtos';
  END CASE;
  SELECT vTipoSabor;
END$$
DELIMITER ;

No entanto, reforço que há vantagens de utilizar o handler, como o desempenho da aplicação, pois os erros são capturados e tratados imediatamente, sem que o fluxo da aplicação seja interrompido.

Ruan, parabéns continue com essa dedicação aos estudos, que você vai longe!

Caso surja alguma dúvida fico à disposição.

Abraços e até mais!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!