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

[SOLUCIONADO] Proble con puntero en evento mysql

Estas en el tema de Proble con puntero en evento mysql en el foro de Mysql en Foros del Web. Hola a todos, un cordial saludo. Tengo un pequeño inconveniente con un evento que hice en mysql para ejecutar una comprobación cada 24 horas. Yo ...
  #1 (permalink)  
Antiguo 12/09/2014, 13:02
Avatar de calichecal  
Fecha de Ingreso: junio-2009
Ubicación: Colombia
Mensajes: 288
Antigüedad: 15 años, 5 meses
Puntos: 12
Busqueda Proble con puntero en evento mysql

Hola a todos, un cordial saludo. Tengo un pequeño inconveniente con un evento que hice en mysql para ejecutar una comprobación cada 24 horas. Yo utilizo un puntero para recorrer los registros de una tabla pero a pesar de que hay de hay registros no encuentra ninguno, el log de mysql me arroja esto:

Código:
[ERROR] Event Scheduler: [root@localhost][bavaria.e_vencimientos_prueba] No data - zero rows fetched, selected, or processed

El evento lo coloque para que se ejecute a intervalos de un minuto para poder hacer las pruebas:

Código MySQL:
Ver original
  1. DELIMITER $$
  2. create event e_vencimientos_prueba on SCHEDULE EVERY 1 MINUTE STARTS CURRENT_TIMESTAMP + INTERVAL 1 MINUTE
  3.  
  4. DECLARE vb_termina BOOL DEFAULT FALSE;
  5. DECLARE idactual int(11);
  6. DECLARE tienevencimiento TINYINT(1);
  7. DECLARE fechavencimiento DATE;
  8. DECLARE puntero CURSOR FOR SELECT id, tieneVencimiento, fechaVencimiento FROM documentosPorEmpleado;
  9. DECLARE CONTINUE HANDLER
  10.      FOR SQLSTATE '02000'
  11.      SET vb_termina = TRUE;
  12.  
  13. OPEN puntero;
  14.    Recorre_Cursor: LOOP
  15.  
  16.         FETCH puntero INTO idactual,tienevencimiento,fechavencimiento;
  17.  
  18.         IF vb_termina THEN
  19.             LEAVE Recorre_Cursor;
  20.         END IF;
  21.  
  22.     IF  tienevencimiento = 1 THEN    
  23.           IF  DATEDIFF(fechavencimiento,CURRENT_TIMESTAMP()) < 0 THEN
  24.              UPDATE  documentosPorEmpleado SET soporteDocumento=NULL, formatoSoporteDocumento=NULL WHERE id = idactual;
  25.           END IF;
  26.     END IF;
  27.  
  28.     END LOOP;
  29.   CLOSE puntero;
  30.  
  31. $$
  32. DELIMITER ;


Alguna idea? Es que ya he probado muchas cosas. El evento lo creé como root, la tabla tiene registros y la sintaxis esta bien, los campos que se actualizan dentro de la condición admiten null...., ¿Hay acaso alguna restricción que no conozca?
__________________
Hay una fuerza motriz más poderosa que el vapor, la electricidad y la energía atómica: la voluntad. -Einstein-

Última edición por gnzsoloyo; 12/09/2014 a las 14:16 Razón: MUY MAL ETIQUETADO. MySQL no es PHP
  #2 (permalink)  
Antiguo 12/09/2014, 14: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: Proble con puntero en evento mysql

A mí me da la impresión de que todo lo que necesitas es algo como:
Código MySQL:
Ver original
  1. DELIMITER $$
  2. CREATE EVENT e_vencimientos_prueba ON SCHEDULE EVERY 1 MINUTE STARTS CURRENT_TIMESTAMP + INTERVAL 1 MINUTE
  3.  
  4. UPDATE documentosPorEmpleado
  5. SET  soporteDocumento = NULL, formatoSoporteDocumento = NULL
  6. WHERE tienevencimiento = 1
  7.     AND fechavencimiento < NOW()
  8.     AND soporteDocumento IS NOT NULL
  9.     AND formatoSoporteDocumento IS NOT NULL;
  10.  
  11. $$
  12. DELIMITER ;
La verdad es que el 99% de las veces que veo usar un CURSOR, no es necesario para lo que se busca.

Nota: Un CURSOR no es un puntero exactamente, son conceptos diferentes.
__________________
¿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 12/09/2014, 15:07
Avatar de calichecal  
Fecha de Ingreso: junio-2009
Ubicación: Colombia
Mensajes: 288
Antigüedad: 15 años, 5 meses
Puntos: 12
Respuesta: Proble con puntero en evento mysql

Cita:
Iniciado por gnzsoloyo Ver Mensaje
A mí me da la impresión de que todo lo que necesitas es algo como:
Código MySQL:
Ver original
  1. DELIMITER $$
  2. CREATE EVENT e_vencimientos_prueba ON SCHEDULE EVERY 1 MINUTE STARTS CURRENT_TIMESTAMP + INTERVAL 1 MINUTE
  3.  
  4. UPDATE documentosPorEmpleado
  5. SET  soporteDocumento = NULL, formatoSoporteDocumento = NULL
  6. WHERE tienevencimiento = 1
  7.     AND fechavencimiento < NOW()
  8.     AND soporteDocumento IS NOT NULL
  9.     AND formatoSoporteDocumento IS NOT NULL;
  10.  
  11. $$
  12. DELIMITER ;
La verdad es que el 99% de las veces que veo usar un CURSOR, no es necesario para lo que se busca.

Nota: Un CURSOR no es un puntero exactamente, son conceptos diferentes.

Hola gnzsoloyo, Muchas gracias por tu respuesta. Funciono perfectamente, Ya veo que hay que utilizar los cursores con cuidado y cuando sea realmente necesario.
__________________
Hay una fuerza motriz más poderosa que el vapor, la electricidad y la energía atómica: la voluntad. -Einstein-

Etiquetas: evento, puntero, registro, select, sql, tabla
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 13:59.