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

Procedure

Estas en el tema de Procedure en el foro de Mysql en Foros del Web. Buenas! La duda que tengo es la siguiente, si declaro un handler para cuando no encuentre un objeto al realizar el Fetch, este handler también ...
  #1 (permalink)  
Antiguo 30/09/2008, 10:59
 
Fecha de Ingreso: septiembre-2008
Ubicación: Barcelona
Mensajes: 33
Antigüedad: 15 años, 7 meses
Puntos: 0
Procedure

Buenas!

La duda que tengo es la siguiente, si declaro un handler para cuando no encuentre un objeto al realizar el Fetch, este handler también me afectará si dentro del repeat hago cualquier Select que no obtenga nada en su consulta y cerrará el Loop??

Es que tengo un problema y creo que es por eso, pero no estoy seguro. Alguna forma de evitarlo?

Mil gracias!! Saludos!




DECLARE curBenef CURSOR FOR SELECT idBeneficiario, DNIPadre, DNIMadre FROM beneficiarios;

/* HANDLER PARA LA PARADA DEL CURSOR */
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;

/* ACTUALIZAR LOS NIE DE LOS BENEFICIARIOS */
OPEN curBenef;

REPEAT
FETCH curBenef INTO idBen, dniPad, dniMad;

UNTIL done END REPEAT;

CLOSE curBenef;
  #2 (permalink)  
Antiguo 30/09/2008, 17:22
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: Procedure

Si, porque lo que detecta es la condición de NOT FOUND.
El HANDLER se declara para detectar eventos, pero no pertenece a ninguna tabla, por lo que la condición se cumple en cuanto se produce el evento en el motor.
Te corresponde a ti el construir la secuencia de modo de poder controlar los diferentes pasos del Procedure que puedan cumplir la tarea que requieres.
Uno de los tips que te sugiero usar es que el NOT FOUND como HANDLER es mejor usarlo únicamente cunado sea una condición de salida absoluta y no exista más tarea que hacer dentro de ciclo. Pero si lo que quieres es realizar varias cosas o comparaciones y tareas condicionales, mejor usa el ciclo para recorrer las tablas y construye flags (variables de control) para detectar las condiciones dentro del ciclo.
En ese caso, lo mejor es un HANDLER definido para el SQLSTATE 02000.
__________________
¿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 30/11/2009, 08:22
 
Fecha de Ingreso: septiembre-2008
Ubicación: Barcelona
Mensajes: 33
Antigüedad: 15 años, 7 meses
Puntos: 0
Respuesta: Procedure

Muchas gracias gnzsoloyo!
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 19:32.