1
respuesta

[Duda] Duda # 07 CASE NOT FOUND

Buen dia

Quisiera saber si en este caso solo funciona para los que no estan listados, ya que cuando digito el codigo de los sabores que estan listados me sale error:

CREATE DEFINER=`root`@`localhost` PROCEDURE `define_sabor_con_error`(vcodigo VARCHAR(20))
BEGIN
DECLARE vsabor VARCHAR(20);
DECLARE mensajeerror VARCHAR(50);
DECLARE CONTINUE HANDLER FOR 1339
SET mensajeerror = 'Sabor no definido en ningún caso.';
SELECT SABOR INTO vsabor FROM tabla_de_productos WHERE CODIGO_DEL_PRODUCTO = vcodigo;
CASE vsabor
WHEN 'Maracuyá' THEN SELECT 'Muy Rico';
WHEN 'Limón' THEN SELECT 'Muy Rico';
WHEN 'Frutilla' THEN SELECT 'Muy Rico';
WHEN 'Uva' THEN SELECT 'Muy Rico';
WHEN 'Sandía' THEN SELECT 'Normal';
WHEN 'Mango' THEN SELECT 'Normal';
END CASE;
SELECT mensajeerror;
END

Por ejemplo aca digito el sabor de maracuya, que deberia salir muy rico:

CALL define_sabor_con_error('243083');

Ingrese aquí la descripción de esta imagen para ayudar con la accesibilidad

1 respuesta

¡Hola!

El error que estás experimentando se debe a que estás intentando seleccionar un sabor que no está incluido en el CASE statement. En este caso, el sabor "Maracuyá" no está siendo seleccionado correctamente.

La razón por la que estás obteniendo un error es porque no has definido el parámetro en tu procedimiento almacenado. Para solucionar esto, debes agregar el parámetro vcodigo a la definición del procedimiento almacenado. Puedes hacerlo de la siguiente manera:

CREATE DEFINER=`root`@`localhost` PROCEDURE `define_sabor_con_error`(vcodigo VARCHAR(20))
BEGIN
    DECLARE vsabor VARCHAR(20);
    DECLARE mensajeerror VARCHAR(50);
    DECLARE CONTINUE HANDLER FOR 1339
    SET mensajeerror = 'Sabor no definido en ningún caso.';
    
    SELECT SABOR INTO vsabor FROM tabla_de_productos WHERE CODIGO_DEL_PRODUCTO = vcodigo;
    
    CASE vsabor
        WHEN 'Maracuyá' THEN SELECT 'Muy Rico';
        WHEN 'Limón' THEN SELECT 'Muy Rico';
        WHEN 'Frutilla' THEN SELECT 'Muy Rico';
        WHEN 'Uva' THEN SELECT 'Muy Rico';
        WHEN 'Sandía' THEN SELECT 'Normal';
        WHEN 'Mango' THEN SELECT 'Normal';
    END CASE;
    
    SELECT mensajeerror;
END

Recuerda también que debes asegurarte de que el valor que pasas como argumento al procedimiento almacenado coincida con los valores definidos en el CASE statement. En este caso, si ejecutas el procedimiento almacenado con el código '243083', obtendrás el resultado 'Muy Rico' para el sabor 'Maracuyá'.

Abrazo y buenos estudios! :D

Si este post te ayudó, por favor, marca como solucionado ✓.