Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

1339 Case not found for CASE statement

Estas en el tema de 1339 Case not found for CASE statement en el foro de Mysql en Foros del Web. Tengo el siguiente codigo de un procedimiento almacenado: Código: BEGIN #Routine body goes here... CASE @olds WHEN 'emp' THEN CASE @news WHEN 'loc' THEN UPDATE ...
  #1 (permalink)  
Antiguo 24/10/2011, 12:58
 
Fecha de Ingreso: junio-2008
Mensajes: 2
Antigüedad: 16 años, 4 meses
Puntos: 0
1339 Case not found for CASE statement

Tengo el siguiente codigo de un procedimiento almacenado:

Código:
BEGIN
	#Routine body goes here...
	CASE @olds
	WHEN 'emp' THEN
		CASE @news
		WHEN 'loc' THEN
			UPDATE equipos SET pe=pe-1,pg=pg+1 WHERE id=@eqloc;
			UPDATE equipos SET pe=pe-1,pp=pp+1 WHERE id=@eqvis;
			UPDATE partidos SET `eqgan`=@news WHERE id=@mst;
			UPDATE log_partidos SET `status`=@news WHERE `match`=@mst;
		WHEN 'vis' THEN
			UPDATE equipos SET pe=pe-1,pg=pg+1 WHERE id=@eqvis;
			UPDATE equipos SET pe=pe-1,pp=pp+1 WHERE id=@eqloc;
			UPDATE partidos SET `eqgan`=@news WHERE id=@mst;
			UPDATE log_partidos SET `status`=@news WHERE `match`=@mst;
		END CASE;
	WHEN 'loc' THEN
		CASE @news
		WHEN 'emp' THEN
			UPDATE equipos SET pe=pe+1,pg=pg-1 WHERE id=@eqloc;
			UPDATE equipos SET pe=pe+1,pp=pp-1 WHERE id=@eqvis;
			UPDATE partidos SET `eqgan`=@news WHERE id=@mst;
			UPDATE log_partidos SET `status`=@news WHERE `match`=@mst;
		WHEN 'vis' THEN
			UPDATE equipos SET pp=pp-1,pg=pg+1 WHERE id=@eqvis;
			UPDATE equipos SET pg=pg-1,pp=pp+1 WHERE id=@eqloc;
			UPDATE partidos SET `eqgan`=@news WHERE id=@mst;
			UPDATE log_partidos SET `status`=@news WHERE `match`=@mst;
		END CASE;
	WHEN 'vis' THEN
		CASE @news
		WHEN 'emp' THEN
			UPDATE equipos SET pe=pe+1,pg=pg-1 WHERE id=@eqvis;
			UPDATE equipos SET pe=pe+1,pp=pp-1 WHERE id=@eqloc;
			UPDATE partidos SET `eqgan`=@news WHERE id=@mst;
			UPDATE log_partidos SET `status`=@news WHERE `match`=@mst;
		WHEN 'loc' THEN
			UPDATE equipos SET pp=pp-1,pg=pg+1 WHERE id=@eqloc;
			UPDATE equipos SET pg=pg-1,pp=pp+1 WHERE id=@eqvis;
			UPDATE partidos SET `eqgan`=@news WHERE id=@mst;
			UPDATE log_partidos SET `status`=@news WHERE `match`=@mst;
		END CASE;
	END CASE;
END
Pero el problema que me retorna
Error: 1339 Case not found for CASE statement

No se que estoy haciendo mal, si alguien puede guiarme estare muy agradecido :)

Saludos!
  #2 (permalink)  
Antiguo 24/10/2011, 17:22
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: 1339 Case not found for CASE statement

Significa simplemente que el SP ha recibido en esa variable un valor no contemplado entre los CASE que definiste. Es por eso que siempre debe colocarse un CASE ELSE que determine qué hacer ante esa situación (eso no es base de datos, es programación elemental).
Incluye el ELSE correspondiente, aunque el mismo no haga nada...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 24/10/2011, 20:17
 
Fecha de Ingreso: junio-2008
Mensajes: 2
Antigüedad: 16 años, 4 meses
Puntos: 0
Respuesta: 1339 Case not found for CASE statement

Listo, ya lo he hecho funcionar :)
Algo curioso en los procedimientos almacenados que si le pones la @ frente a una variable no te lo toma, pero si lo toma cuando se lo quitas, muy curioso, pero voy aprendiendo...

Muchas gracias!
  #4 (permalink)  
Antiguo 24/10/2011, 21:33
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: 1339 Case not found for CASE statement

No es que lo tomes o lo quites. Es que el prefijo "@" se usa para crear variables de usuario y no para variables locales de stored procedures.
Las variables de usuario son un tema especial de MySQL y deben ser tratadas con precaución, ya que si no las aplicas correctamente puedes tener resultados incorrectos, erráticos o confusos.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: case, found, statement
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:57.