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

Consulta sobre procedimientos almacenados

Estas en el tema de Consulta sobre procedimientos almacenados en el foro de Mysql en Foros del Web. Buenas.. como va?? queria consultarles acerca de algo q me esta pasando con los procedimientos almacenados... va en realidad con uno, porque vengo creando y ...
  #1 (permalink)  
Antiguo 18/12/2010, 17:45
 
Fecha de Ingreso: diciembre-2010
Mensajes: 31
Antigüedad: 13 años, 4 meses
Puntos: 0
Consulta sobre procedimientos almacenados

Buenas.. como va?? queria consultarles acerca de algo q me esta pasando con los procedimientos almacenados... va en realidad con uno, porque vengo creando y hasta ahora todo bien, hasta que quise hacer el siguiente y me tiro error... Todo cuando empece a usar varias consultas dentro del SP.. que es el siguiente

Código:
DELIMITER |

CREATE PROCEDURE recorridos(in idGps int,in buscar int)
BEGIN
IF buscar = 1 THEN
	SELECT * 
	FROM recorridos 
	Where DATE_SUB(CURDATE(), INTERVAL 1 DAY) = DATE(fecha) AND idGps = idGps;
ELSE IF buscar=2 THEN 
	SELECT * FROM recorridos 
	Where DATE_SUB(CURDATE(), INTERVAL 0 DAY) = DATE(fecha) AND idGps = idGps;
ELSE IF buscar=3 THEN
	SELECT * FROM 
	recorridos 
	Where ( DATE_SUB(CURDATE(), INTERVAL 0 DAY) = DATE(fecha) ) AND ( TIMEDIFF(CURTIME(), hora) < '12:00:00' ) AND (idGps = idGps);
ELSE IF buscar=4 THEN
	SELECT * 
	FROM recorridos 
	Where ( DATE_SUB(CURDATE(), INTERVAL 0 DAY) = DATE(fecha) ) AND ( TIMEDIFF(CURTIME(), hora) < '06:00:00' ) AND (idGps = idGPS);
ELSE IF buscar=5 THEN
	SELECT * 
	FROM recorridos 
	Where ( DATE_SUB(CURDATE(), INTERVAL 0 DAY) = DATE(fecha) ) AND ( TIMEDIFF(CURTIME(), hora) < '01:00:00' ) AND (idGps = idGps);
ELSE IF buscar=6 THEN
	SELECT * 
	FROM recorridos 
	WHERE codRecorrido = (SELECT max(codRecorrido) FROM recorridos Where idGps = idGps);
ELSE IF buscar=7 THEN
	SELECT fecha, sum(velocidad / count(fecha), max(velocidad)
	FROM recorridos 
	WHERE ( DATE(fecha) > DATE_SUB(CURDATE(), INTERVAL 7 DAY) ) and idGps=idGps
	GROUP BY fecha HAVING sum(velocidad)>0;
ELSE IF buscar=8 THEN
	SELECT fecha, sum(velocidad) / count(fecha),max(velocidad)
	FROM recorridos 
	WHERE ( DATE(fecha) > DATE_SUB(CURDATE(), INTERVAL 1 MONTH) ) and idGps=idGps
	GROUP BY fecha HAVING sum(velocidad) > 0;
END IF
END; |
delimiter ;
El ultimo END lo probe con las ; y sin ellas pero siempre igual...

El error que me tira es el siguiente:

Código:
#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 'DELIMITER +

CREATE PROCEDURE recorridos(in idGps int,in buscar int)
BEGIN
' at line 1
Si alguien me puede ayudar se lo agradezco.. intente de mil maneras pero me sige tirando el mismo error... probe distintos delimitadores pero siempre este mismo error..

desde ya muchas gracias!!
  #2 (permalink)  
Antiguo 18/12/2010, 19:27
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: Consulta sobre procedimientos almacenados

Código MySQL:
Ver original
  1. DELIMITER $$
  2.  
  3. CREATE PROCEDURE recorridos(in idGps int,in buscar int)
  4. IF buscar = 1 THEN
  5.     SELECT *
  6.     FROM recorridos
  7.     Where DATE_SUB(CURDATE(), INTERVAL 1 DAY) = DATE(fecha) AND idGps = idGps;
  8. ELSEIF buscar=2 THEN
  9.     SELECT * FROM recorridos
  10.     Where DATE_SUB(CURDATE(), INTERVAL 0 DAY) = DATE(fecha) AND idGps = idGps;
  11. ELSEIF buscar=3 THEN
  12.     SELECT * FROM
  13.     recorridos
  14.     Where ( DATE_SUB(CURDATE(), INTERVAL 0 DAY) = DATE(fecha) ) AND ( TIMEDIFF(CURTIME(), hora) < '12:00:00' ) AND (idGps = idGps);
  15. ELSEIF buscar=4 THEN
  16.     SELECT *
  17.     FROM recorridos
  18.     Where ( DATE_SUB(CURDATE(), INTERVAL 0 DAY) = DATE(fecha) ) AND ( TIMEDIFF(CURTIME(), hora) < '06:00:00' ) AND (idGps = idGPS);
  19. ELSEIF buscar=5 THEN
  20.     SELECT *
  21.     FROM recorridos
  22.     Where ( DATE_SUB(CURDATE(), INTERVAL 0 DAY) = DATE(fecha) ) AND ( TIMEDIFF(CURTIME(), hora) < '01:00:00' ) AND (idGps = idGps);
  23. ELSEIF buscar=6 THEN
  24.     SELECT *
  25.     FROM recorridos
  26.     WHERE codRecorrido = (SELECT max(codRecorrido) FROM recorridos Where idGps = idGps);
  27. ELSEIF buscar=7 THEN
  28.     SELECT fecha, sum(velocidad / count(fecha), max(velocidad)
  29.     FROM recorridos
  30.     WHERE ( DATE(fecha) > DATE_SUB(CURDATE(), INTERVAL 7 DAY) ) and idGps=idGps
  31.     GROUP BY fecha HAVING sum(velocidad)>0;
  32. ELSEIF buscar=8 THEN
  33.     SELECT fecha, sum(velocidad) / count(fecha),max(velocidad)
  34.     FROM recorridos
  35.     WHERE ( DATE(fecha) > DATE_SUB(CURDATE(), INTERVAL 1 MONTH) ) and idGps=idGps
  36.     GROUP BY fecha HAVING sum(velocidad) > 0;
  37. END$$
  38. delimiter ;
__________________
¿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 18/12/2010, 21:31
 
Fecha de Ingreso: diciembre-2010
Mensajes: 31
Antigüedad: 13 años, 4 meses
Puntos: 0
Respuesta: Consulta sobre procedimientos almacenados

Hola gracias por tu respuesta...

pero me sige tirando el mismo error...

Código:
DELIMITER $$ CREATE PROCEDURE recorridos( IN idGps INT, IN buscar INT ) BEGIN IF buscar =1 THEN SELECT *
FROM recorridos
WHERE DATE_SUB( CURDATE( ) , INTERVAL 1
DAY ) = DATE( fecha )
AND idGps = idGps;

MySQL ha dicho: Documentación
#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 'DELIMITER $$

CREATE PROCEDURE recorridos(IN idGps INT,IN buscar INT)
BEGIN
' at line 1
  #4 (permalink)  
Antiguo 19/12/2010, 06:25
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: Consulta sobre procedimientos almacenados

Vayamos por partes:
1) ¿Qué versión de MySQL usas en local y en hosting (si lo usas)?
2) ¿Qué interfase usas para cargar el SP (MySQL Workbench, Navicat, MySQL Query Browser, phpMyAdmin, otro).
__________________
¿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 19/12/2010, 06:34
 
Fecha de Ingreso: diciembre-2010
Mensajes: 31
Antigüedad: 13 años, 4 meses
Puntos: 0
Respuesta: Consulta sobre procedimientos almacenados

hola gracias por responder....

mira el proyecto lo estoy haciendo en local, para despues subirlo al servidor...

en local tengo la version 5.0.45-community-nt-log y lo cargo por phpmyadmin 2.10.2, despues de tu ultima respuesta, me conecte al server y tengo la version 5.0.67-community y del phpmyadmin 3.3.3.

Asique probe en el servidor y me anduvo lo mas bien el procedimiento...

Porque sera?? si me podes decir te lo agradezco, porq sino me hubieses dicho seguiria intentando en local, es por la version o porq puede ser???....

desde ya muchas gracias!!!
  #6 (permalink)  
Antiguo 19/12/2010, 11:21
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: Consulta sobre procedimientos almacenados

Fijate que estás trabajando con una versión de PHP muy vieja respecto de la que está en el servidor. Es probable )y recalco probable) que haya algún problema de compatibilidad con la librería con que PHP se comunica al MySQL.
No creo que el problema esté entre las versiones 5.0.45 y 5.0.67 de MySQL, porque yo mismo he trabajado con ambas en copias de la misma base, con más de 60 SP cargados sin mayores problemas. Por allí, a las cansadas, surgía algún dilema de versiones, pero fueron muy raros.

De todos modos, siempre es una buena práctica usar las mismas versiones para desarrollar que para trabajar.
Consejo: Saca lo que tienes en tu PC y pon lo mismo que tienes en el servidor. Te evitarás problemas.
__________________
¿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 19/12/2010, 14:38
 
Fecha de Ingreso: diciembre-2010
Mensajes: 31
Antigüedad: 13 años, 4 meses
Puntos: 0
Respuesta: Consulta sobre procedimientos almacenados

gracias por la respuesta...

No estoy usuando php... el proyecto va en java, igualmente todos los procedimientos los creaba y probaba desde el propio phpmyadmin... asiq problema de php no es..

Otra cosa que me pasaba cuando probaba un procedimiento, que devolvia varias filas me tiraba un error de que no podia crear el Result set o parecido... Y cuando probe el mismo procedimiento en el mysql-font me di cuenta q por algo habia mal, porq ahi si me lo ejecutaba...

asique algo mal configurado debo tener en el mysql... que no me deja crear algunos procedimientos... Porque como te dije, siempre los cree y probe desde el propio sql.

Y trabajo en local porq me resulta muchisimoo mas comodo.. igualmente para esto lo voy a empezar a hacer desde el servidor.

Muchisimas gracias por tus respuestass...
  #8 (permalink)  
Antiguo 20/12/2010, 06:39
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: Consulta sobre procedimientos almacenados

Cita:
igualmente todos los procedimientos los creaba y probaba desde el propio phpmyadmin... asiq problema de php no es..
SI fallaban las pruebas, el problema podía ser el PHP porque el phpMyAdmin usa PHP para ejecutar las sentencias, y por tanto es probable un error de PHP.
Respecto a cargar los SP via Java, es posible que si falla la carga, se deba a que estás enviando también los DELIMITER en la ejecución.
Cuando se usa usa un método programado lo único que se envía es el CREATE PROCEDURE entero, desde el CREATE al END, en una sola ejecución. No se envian los DELIMITER porque el método que MySQL usa para tomar ese SP es diferente al de PHP y distinto del uso de la consola de MySQL.
Esa sería la idea, y al menos es la que se usa en .Net para el mismo caso.

Prueba enviarlos con Java, pero sin enviar el DELIMITER.
__________________
¿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 23/12/2010, 04:52
 
Fecha de Ingreso: diciembre-2010
Mensajes: 31
Antigüedad: 13 años, 4 meses
Puntos: 0
Respuesta: Consulta sobre procedimientos almacenados

muchas gracias por tu ayuda... la verdad me sirvio de mucho, si bien no probe como decias desde el servidor probe todo y me anduvo, asique si duda es la version q tengo instalada en mi pc...

muchisima gracias y hasta la proxima...

Saludos!!

Etiquetas: procedimiento, almacenar
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 23:06.