Solucionado (ver solución)
Solucionado
(ver solución)
2
respuestas

Error , ayuda

Mi codigo es asi:

USE JUGOS_VENTAS;
DROP PROCEDURE IF EXISTS GET_SABOR();
DELIMITER $$
USE JUGOS_VENTAS$$
CREATE PROCEDURE GET_SABOR(CODIGO VARCHAR(40))
BEGIN 

DECLARE VSABOR VARCHAR(30);

SELECT SABOR INTO VSABOR FROM TABLA_DE_PRODUCTOS
WHERE CODIGO_DEL_PRODUCTO = CODIGO;

CASE VSABOR
WHEN 'MARACUYA' THEN SELECT 'MUY RICO';
WHEN 'LIMON' THEN SELECT 'MUY RICO';
WHEN 'FRUTILLA' THEN SELECT 'MUY RICO';
WHEN 'UVA' THEN SELECT 'MUY RICO';
WHEN 'SANDIA' THEN SELECT 'NORMAL';
WHEN 'MANGO' THEN SELECT 'NORMAL';
ELSE SELECT "JUGOS COMUNES";
END CASE;

END$$

El del profesor es: Ingrese aquí la descripción de esta imagen para ayudar con la accesibilidadTodo el rato me dice que hay un error de sintaxis. Esta igual al del profesor. Cual sera el error? De cualquier manera se uso la siguiente manera, pero no esta igual al del profesor:

USE JUGOS_VENTAS;
DROP PROCEDURE IF EXISTS GET_SABOR;
DELIMITER $$
CREATE PROCEDURE GET_SABOR(CODIGO VARCHAR(40))
BEGIN 
    DECLARE VSABOR VARCHAR(30);

    SELECT SABOR INTO VSABOR FROM TABLA_DE_PRODUCTOS
    WHERE CODIGO_DEL_PRODUCTO = CODIGO;

    CASE
        WHEN VSABOR IN ('MARACUYA', 'LIMON', 'FRUTILLA', 'UVA') THEN
            SELECT 'MUY RICO';
        WHEN VSABOR IN ('SANDIA', 'MANGO') THEN
            SELECT 'NORMAL';
        ELSE
            SELECT 'JUGOS COMUNES';
    END CASE;
END $$
DELIMITER ;

Con este si funciona. Saludos.

2 respuestas
solución!

¡Hola Edsel!

Gracias por compartir tu duda. Parece que estás teniendo problemas con la sintaxis de tu procedimiento almacenado en MySQL. Comparando tu código con el del profesor, veo que hay algunas diferencias que podrían estar causando el error.

En tu código original, estás usando CASE VSABOR en lugar de CASE. Además, estás usando SELECT dentro de cada WHEN, lo cual no es necesario en este caso. En cambio, puedes simplemente asignar el resultado a una variable y luego devolver esa variable al final del procedimiento.

Aquí está el código corregido:

USE JUGOS_VENTAS;
DROP PROCEDURE IF EXISTS GET_SABOR;
DELIMITER $$
CREATE PROCEDURE GET_SABOR(CODIGO VARCHAR(40))
BEGIN 
    DECLARE VSABOR VARCHAR(30);

    SELECT SABOR INTO VSABOR FROM TABLA_DE_PRODUCTOS
    WHERE CODIGO_DEL_PRODUCTO = CODIGO;

    CASE
        WHEN VSABOR IN ('MARACUYA', 'LIMON', 'FRUTILLA', 'UVA') THEN
            SET @RESULTADO = 'MUY RICO';
        WHEN VSABOR IN ('SANDIA', 'MANGO') THEN
            SET @RESULTADO = 'NORMAL';
        ELSE
            SET @RESULTADO = 'JUGOS COMUNES';
    END CASE;

    SELECT @RESULTADO AS RESULTADO;
END $$
DELIMITER ;

Con este código, asignamos el resultado a la variable @RESULTADO y luego lo devolvemos con SELECT @RESULTADO AS RESULTADO al final del procedimiento.

Espero que esto resuelva tu problema. Si tienes alguna otra pregunta, ¡no dudes en preguntar! ¡Buena suerte con tu curso de Procedures SQL!

Espero haber ayudado y buenos estudios!

Si este post te ayudó, por favor, marca como solucionado ✓. Continúa con tus estudios! :)

Muchas gracias. No declaraste la variable @Resultado, y aun asi funcion, ese arroba tiene algo que ver(creo). Siempre se aprende algo nuevo. Gracias