Ver Mensaje Individual
  #11 (permalink)  
Antiguo 01/03/2011, 07:08
Avatar de gnzsoloyo
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, 5 meses
Puntos: 2658
Respuesta: Resultado null de una select en un procedimiento almacenado

Bueno, ahora me queda amás claro (aunque no termino de entender todo este procedimiento para algo que puedes obtener con dos o tres consultas directamente).
Paso a explicar: ANYTRA toma el valor del campo correspondiente en la tabla origen en cada FETCH, pero el último FETCH, el que pone done en 1, trata de acceder a un registro que no existe y es precisamente eso lo que controla el HANDLER. Como el puntero trata de ir más allá de los registros de la tabla, y estos no existen, el valor devuelto por ese último FETCH es NULL...
Este es un tema que a veces no se conoce si no lo has leido en profundidad, no te preocupes. El punto esencial es que como FETCH devuelve NULL en ese momento, todos los campos del INTO se vuelve NULL... simplemente.
De hecho, si en lugar de RETURN ANYTRA se pudiese hacer un SELECT a todos los campos, comprobarías que todos los valores están en NULL.
El error consiste en pretender obtener el último valor real que tuvo ANYTRA en esta forma. No lo puedes hacer así. Yo en tu caso usaría otra variable INT, la cual sólo llenaría con el valor de ANYTRA dentro del IF y la usaría para el RETURN.
De todos modos, a mi entender, esto se puede hacer sin un CURSOR, y con menos complicaciones.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)