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

[SOLUCIONADO] Procedimiento Almacenado

Estas en el tema de Procedimiento Almacenado en el foro de Mysql en Foros del Web. Hola, ¿Alguien me podría decir qué está mal en mi procedimiento almacenado? El error que me arroja el MySQL es el siguiente: #1064 - You ...
  #1 (permalink)  
Antiguo 08/06/2014, 22:11
 
Fecha de Ingreso: junio-2014
Mensajes: 18
Antigüedad: 9 años, 10 meses
Puntos: 0
Pregunta Procedimiento Almacenado

Hola,

¿Alguien me podría decir qué está mal en mi procedimiento almacenado?

El error que me arroja el MySQL es el siguiente:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'UPDATE Usuarios SET nombre = nombrex, apellido = apellidox, edad = edadx, genero' at line 4

Mi procedimiento almacenado es el siguiente:

Código:
CREATE PROCEDURE CrearUsuario (in idx int, in nombrex varchar(25), in apellidox varchar(25), in edadx int(2), in generox char(1), in ciudadx varchar(30), in estadox varchar(30), in paisx varchar(30))
BEGIN
	if ((SELECT COUNT(*) FROM Usuarios WHERE id = idx) > 0)
		UPDATE Usuarios SET nombre = nombrex, apellido = apellidox, edad = edadx, genero = generox, ciudad = ciudadx, estado = estadox, pais = paisx WHERE id = idx;
	else
		INSERT INTO Usuarios(nombre, apellido, edad, genero, ciudad, estado, pais) VALUES(nombrex, apellidox, edadx, generox, ciudadx, estadox, paisx)
END
Les agradezco sus respuestas por anticipado :)
  #2 (permalink)  
Antiguo 09/06/2014, 03:16
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, 4 meses
Puntos: 2658
Respuesta: Procedimiento Almacenado

Te falta el cierre de sentencia en el INSERT (;).
__________________
¿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 09/06/2014, 10:59
 
Fecha de Ingreso: junio-2014
Mensajes: 18
Antigüedad: 9 años, 10 meses
Puntos: 0
Respuesta: Procedimiento Almacenado

Hola gnzsoloyo,

Te agradezco tu respuesta, sin embargo, eso no solucionó mi problema :(
  #4 (permalink)  
Antiguo 09/06/2014, 11:10
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, 4 meses
Puntos: 2658
Respuesta: Procedimiento Almacenado

Porque eso era lo más visible...

Ahora bien, te recomiendo que leas el manual de referencia, porque tenías más de dos errores. el IF no estaba cerrado (END IF) y ni siquiera habías puesto el THEN correspondiente. Tampoco estaba bien cerrado el parentesis en la condición del IF.
Cuando pasas de uno a otro DBMS debes aprender los lenguajes procedurales de neuvo, porque no son iguales entre ellos.

Código MySQL:
Ver original
  1. CREATE PROCEDURE CrearUsuario (IN idx INT, IN nombrex VARCHAR(25), IN apellidox VARCHAR(25), IN edadx INT(2), IN generox CHAR(1), IN ciudadx VARCHAR(30), IN estadox VARCHAR(30), IN paisx VARCHAR(30))
  2.     IF (SELECT COUNT(*) FROM Usuarios WHERE id = idx) > 0 THEN
  3.         UPDATE Usuarios
  4.         SET nombre = nombrex,
  5.             apellido = apellidox,
  6.             edad = edadx,
  7.             genero = generox,
  8.             ciudad = ciudadx,
  9.             estado = estadox,
  10.             pais = paisx
  11.         WHERE id = idx;
  12.     ELSE
  13.         INSERT INTO Usuarios(nombre, apellido, edad, genero, ciudad, estado, pais)
  14. VALUES(nombrex, apellidox, edadx, generox, ciudadx, estadox, paisx);
  15.    END IF;
__________________
¿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 09/06/2014, 13:04
 
Fecha de Ingreso: junio-2014
Mensajes: 18
Antigüedad: 9 años, 10 meses
Puntos: 0
Respuesta: Procedimiento Almacenado

He probado tu código y me da este error:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 12
  #6 (permalink)  
Antiguo 09/06/2014, 13:13
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, 4 meses
Puntos: 2658
Respuesta: Procedimiento Almacenado

El codigo está perfecto, lo sé porque estoy usando el MySQL Workbench, que tiene un corrector sintáctico, y me muestra que no existen errores.
La pregunta es cómo estás intentando cargarlo tu... Porque no con todas las interfases se hace de la misma manera.

¿Qué estás usando?
¿MySQL Workbench?
¿phpMyadmin?
¿Consola de MySQL?
¿Directamente por script?

¿Cómo?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 09/06/2014, 13:54
 
Fecha de Ingreso: junio-2014
Mensajes: 18
Antigüedad: 9 años, 10 meses
Puntos: 0
Respuesta: Procedimiento Almacenado

Bueno, estoy intentando desde el PhpMyAdmin de manera local
  #8 (permalink)  
Antiguo 09/06/2014, 14:48
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, 4 meses
Puntos: 2658
Respuesta: Procedimiento Almacenado

OK
Entonces el tema es que no estás poniendo el delimitador necesario para carga de SP, ni tampoco indicandolo en el sitio correcto.
Este tema ya lo hemos tratado en el foro varias veces, y lo que debes hacer es poner un delimitador final del SP diferente, para hacer que cargue como un sólo objeto.
Pon el codigo así:
Código MySQL:
Ver original
  1. CREATE PROCEDURE CrearUsuario (IN idx INT, IN nombrex VARCHAR(25), IN apellidox VARCHAR(25), IN edadx INT(2), IN generox CHAR(1), IN ciudadx VARCHAR(30), IN estadox VARCHAR(30), IN paisx VARCHAR(30))
  2.     IF (SELECT COUNT(*) FROM Usuarios WHERE id = idx) > 0 THEN
  3.         UPDATE Usuarios
  4.         SET nombre = nombrex,
  5.             apellido = apellidox,
  6.             edad = edadx,
  7.             genero = generox,
  8.             ciudad = ciudadx,
  9.             estado = estadox,
  10.             pais = paisx
  11.         WHERE id = idx;
  12.     ELSE
  13.         INSERT INTO Usuarios(nombre, apellido, edad, genero, ciudad, estado, pais)
  14. VALUES(nombrex, apellidox, edadx, generox, ciudadx, estadox, paisx);
  15.    END IF;
  16. END$$ -- Este es el nuevo delimitador temporal de esa ejecución
Y luego en ese combo inferior donde dice "Delimiter":
pones el $$ (prefiero $$ y no // por razones de peso que no vienen al caso.
Como podrás comprobar luego, es un tema de interfaz.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #9 (permalink)  
Antiguo 09/06/2014, 15:04
 
Fecha de Ingreso: junio-2014
Mensajes: 18
Antigüedad: 9 años, 10 meses
Puntos: 0
Respuesta: Procedimiento Almacenado

Tienes todas las letras llenas de razón, te agradezco mucho tu ayuda.

:D
  #10 (permalink)  
Antiguo 09/06/2014, 15:07
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, 4 meses
Puntos: 2658
Respuesta: Procedimiento Almacenado

__________________
¿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: almacenado, procedimiento
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 00:08.