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

[SOLUCIONADO] Problema con mensaje al Insertar datos en un procedimiento

Estas en el tema de Problema con mensaje al Insertar datos en un procedimiento en el foro de Mysql en Foros del Web. Buenas: Estoy empezando con lo de crear procedimientos en MYSQL, y en una actividad que me han marcado hay un ejercicio que no consigo que ...
  #1 (permalink)  
Antiguo 22/02/2016, 08:01
 
Fecha de Ingreso: noviembre-2015
Ubicación: Las Palmas (Canarias)
Mensajes: 14
Antigüedad: 8 años, 4 meses
Puntos: 0
Problema con mensaje al Insertar datos en un procedimiento

Buenas:

Estoy empezando con lo de crear procedimientos en MYSQL, y en una actividad que me han marcado hay un ejercicio que no consigo que me salga.

Este ejercicio dice:

CREAR UN PROCEDIMIENTO QUE INSERTE UN EQUIPO DE CICLISMO. LOS DATOS SE DEBEN PASAR COMO PARAMETROS. SE DEBE MOSTRAR UN MENSAJITO DE “EQUIPO INSERTADO”.

He conseguido la parte de crear el procedimiento para insertar los datos, pero a la hora de invocarlo no me sale el mensaje de "Equipo Insertado", como dice en el ejercicio.

Yo he hecho esto:

Código MySQL:
Ver original
  1. DELIMITER //
  2. CREATE PROCEDURE insertar(in nom_eq varchar(30))
  3. IF NOT EXISTS (SELECT nomeq FROM equipo WHERE nomeq=nom_eq)
  4. INSERT INTO equipo(nomeq) VALUES (nom_eq);
  5. SELECT "Equipo Insertado";
  6. //

Cuando lo invoco con el "CALL" solo me sale el nombre del equipo, pero no el mensaje.
¿Qué estoy haciendo mal?
  #2 (permalink)  
Antiguo 22/02/2016, 08:19
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Problema con mensaje al Insertar datos en un procedimiento

EXISTS no funciona en ese contexto.

Haz las cosas más simples:

Código MySQL:
Ver original
  1. DELIMITER $$
  2. CREATE PROCEDURE insertar(in nom_eq varchar(30))
  3.    IF (SELECT COUNT(*) FROM equipo WHERE nomeq=nom_eq) = 01  THEN
  4.       INSERT INTO equipo(nomeq) VALUES (nom_eq);
  5.       SELECT 'Equipo Insertado';
  6.     ELSE
  7.       SELECT 'Equipo YA EXISTENTE';
  8.     END IF;
  9.   END;
  10. $$
  11.  
  12. DELIMITER ;

Posdata: No uses comillas (") para las cadenas de texto. Usa apóstrofos (').
Las comillas pueden no funcionar correctamente dependiendo de la configuración del servidor. Bajo ciertas condiciones MySQL las interpretará como delimitadores de nombres de objetos de base de datos, y no para cadenas de texto.
Podrían disparar errores de ejecución de difícil diagnóstico.
__________________
¿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 22/02/2016, 08:42
 
Fecha de Ingreso: noviembre-2015
Ubicación: Las Palmas (Canarias)
Mensajes: 14
Antigüedad: 8 años, 4 meses
Puntos: 0
Respuesta: Problema con mensaje al Insertar datos en un procedimiento

Muchas gracias.

También lo he usado para un ejercicio similar en el que se me pedía lo mismo pero que esta vez borrara los datos.

Todavía no controlo mucho el tema, por eso me gustaría saber ¿por qué pusiste el IF(...)=01?

¿Es una forma alternativa de sustituir el EXISTS?
  #4 (permalink)  
Antiguo 22/02/2016, 08:52
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Problema con mensaje al Insertar datos en un procedimiento

Error de tipeo... Los ceros a la izquierda no existen.

Cita:
¿Es una forma alternativa de sustituir el EXISTS?
EXISTS no funciona en el IF. Es una clausula que debe evaluar el NULL, y usualmente opera bien cuando lo pones como condición en el WHERE para la salida de una subconsulta (ver: https://dev.mysql.com/doc/refman/5.7...ubqueries.html).

Lo que correspondería en tu caso podría ser:
Código MySQL:
Ver original
  1. DELIMITER $$
  2. CREATE PROCEDURE insertar(in nom_eq varchar(30))
  3.    IF (SELECT nomeq FROM equipo WHERE nomeq=nom_eq) IS NULL  THEN
  4.       INSERT INTO equipo(nomeq) VALUES (nom_eq);
  5.       SELECT 'Equipo Insertado';
  6.     ELSE
  7.       SELECT 'Equipo YA EXISTENTE';
  8.     END IF;
  9.   END;
  10. $$
  11.  
  12. DELIMITER ;

Pero hacer un COUNT es mucho más efectivo.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 22/02/2016, 14:28
 
Fecha de Ingreso: noviembre-2015
Ubicación: Las Palmas (Canarias)
Mensajes: 14
Antigüedad: 8 años, 4 meses
Puntos: 0
Respuesta: Problema con mensaje al Insertar datos en un procedimiento

Gracias por la ayuda.

Le echaré un vistazo a la sintaxis de MYSQL.

Etiquetas: mensaje, procedimiento, select, sql
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 10:03.