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 select
com 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!