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

store procedure time servidor

Estas en el tema de store procedure time servidor en el foro de Mysql en Foros del Web. hola tengo un problema, quiero hacer un store procedure en el cual me compare el inicio de y el final de un evento tengo dos ...
  #1 (permalink)  
Antiguo 16/11/2012, 09:38
 
Fecha de Ingreso: noviembre-2012
Ubicación: maracay
Mensajes: 2
Antigüedad: 11 años, 5 meses
Puntos: 0
store procedure time servidor

hola tengo un problema, quiero hacer un store procedure en el cual me compare el inicio de y el final de un evento tengo dos tablas una evento y otra statusEvento
select las doy y quiero es actualizar los datos con el procedure pero tambien quiero q lo compare con la hora actual de mi servidor cada vez q se registre un nuevo evento el procedure se dispare,


Código MySQL:
Ver original
  1. delimiter //
  2. CREATE PROCEDURE `svEventProgression` ()
  3. select svEvent.idEvent,
  4.         svEvent.idUser,
  5.         svEvent.createAt,
  6.         svEvent.dateStart,
  7.         svEvent.dateFinish,
  8.         svEventStages.progression,
  9.         now(),
  10.         svEventStages.status
  11.         from svEvent
  12.         LEFT JOIN  svEventStages on svEventStages.idEventStages  = svEventStages.idEvent;
  13.  
  14.        
  15.             IF (dateStart > = NOW) AND (dateFinish < NOW )
  16.            
  17.             UPDATE svEventStatus where   status = 2 set prgression =1 and status =1 set progression =1;
  18.            
  19.            
  20.                 if ( dateFinish > = now )
  21.                
  22.                 update svEventStatus where status = 3 set progression =1 and Status =1 set progression =0;
  23.                         end iF;
  24.                     end IF;
  25.         END //

espero su ayuda graciass

Última edición por gnzsoloyo; 16/11/2012 a las 11:01 Razón: Codigo SQL sin etiquetar.
  #2 (permalink)  
Antiguo 16/11/2012, 11:06
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: store procedure time servidor

Tienes al menos tres errores:
1) No has declarado las variables que usarás para manejar los datos a comparar.
2) NO estás poniendo los datos de la fechas en variables.
3) Un SP no se puede disparar sólo, ni ante eventos.

Por otro lado, no podrías usar, hasta lo que sé, un trigger para administrar ese llamado a SP, porque los trigger no admiten llamadas de SP.
En todo caso lo que podrías hacer es crear un SP que se encargue de guardar el evento, y que sea ese SP el que haga todo el resto de la tarea, como parte de su responsabilidad.
__________________
¿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 16/11/2012, 11:57
 
Fecha de Ingreso: noviembre-2012
Ubicación: maracay
Mensajes: 2
Antigüedad: 11 años, 5 meses
Puntos: 0
Respuesta: store procedure time servidor

delimiter //
CREATE PROCEDURE `svEventProgression` ()
BEGIN
DECLARE @TIM TIMESTAMP
select svEvent.idEvent,
svEvent.idUser,
svEvent.createAt,
svEvent.dateStart,
svEvent.dateFinish,
svEventStages.progression,
now(),
svEventStages.status
from svEvent
LEFT JOIN svEventStages on svEventStages.idEventStages = svEventStages.idEvent;

SET TIM =NOW;
IF (dateStart > = TIM) AND (dateFinish < TIM )

UPDATE svEventStatus where status = 2 set prgression =1 and status =1 set progression =1;


if ( dateFinish > = TIM)

update svEventStatus where status = 3 set progression =1 and Status =1 set progression =0;
end iF;
end IF;
END //
delcare la variable y me da este error


1064

solo quiero que me compare las fechas y me cambie en progression y status estodo
  #4 (permalink)  
Antiguo 16/11/2012, 12:51
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: store procedure time servidor

Ahora estás declarando mal las variables.
No es lo mismo en MySQL poner @tiempo que simplemente tiempo. Son dos variables diferentes.
La primera es una variable de global y de sesión, la segunda es local de SP o SF.
Por otro lado, como te dije, no estás declarando ni cargando las variables dateStart y dateFinish, que en ese contexto no son los campos de la tabla, sino variables.

Lo que no me queda claro si entendiste, es que no puedes llamar el SP desde unTRIGGER, por lo cual si se produce un INSERT en ta tabla de eventos, no puedes disparar el SP en automático. tendrías que hacerlo llamándoolo luego de ejecutar el INSERT, si el mismo es exitoso...

Ahora bien, mirando con más cuidado, hay algunos detalles más:
- La consulta te devuelve N registros, siendo N el total de registros existentes en la primera tabla.
- Para poder evaluar eso, no se puede hacer con variables simplemente, sino que debes implementar un CURSOR y un LOOP o REPEAT, que permita recorrer uno a uno los resultados y proceder en consecuencia.
- Para implementar un CURSOR, también debes usar un HANDLER de tipo CONTINUE, y evitar excepciones no controlables.
- Debes recoger también el ID del registro que se procesa, para poder usar lo en las operaciones DML (UPDATE o INSERT) que resuelves en el IF;
- Los IFs también están mal escritos, porque en MySQL esas estructuras se manejan de otro modo.


Te sugiero que te fijes en las FAQs de MySQL, donde hay un post donde se explica cómo se hace todo eso.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 16/11/2012 a las 14:42

Etiquetas: join, procedure, select, servidor, store, tabla, time
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 05:35.