Amigos, muchas gracias por sus respuestas, sinceramente no se en que habré "metido la pata" pero ahora la función está andando de 10 con los retornos de la manera return next; Les pido disculpas porque parece que el error venía por otro lado, aparentemente por un tipo de datos en un parámetro. GRACIAS y DISCULPAS
Guillermo Villanueva <http://ar.linkedin.com/in/guillermovillanueva> El 27 de febrero de 2013 17:26, Juan <[email protected]>escribió: > Guillermo > > > entre lineas > > > 2013/2/27 Guillermo E. Villanueva <[email protected]> > >> Ok, podría forzar un for, pero no me gustaba mucho la idea. >> Muchas gracias. >> > > Por eso en tu bucle calculas. rellenas el type que funciona como si fuera > una struct donde metes datos. > luego en cada iteraccion devolves esta struct. > es justo, segun yo lo veo, lo que necesitas. > salu2 > jmdc > > >> >> Guillermo Villanueva >> <http://ar.linkedin.com/in/guillermovillanueva> >> >> >> El 27 de febrero de 2013 17:19, Juan <[email protected]>escribió: >> >> Guillermo >>> >>> >>> Hasta donde se el return next ; es dentro de un for... loop que en tu >>> code no se ve. >>> Ademas es return next var; >>> donde var es la variable que venis recorriendo en el loop. >>> si realmente tenes un loop, arma un tipo (type) con los campos ( que >>> necesites) y que vos queres y devolver en cada >>> iteracion devolvelo. >>> si por ej se llama t , la variable seria algo asi. >>> >>> declare t type; >>> ... >>> beguin >>> >>> for ... >>> >>> t.campo1= alguncalculo; >>> t.campo2= otrocalculo ; >>> >>> return next t >>> loop >>> .. >>> end >>> >>> salu2 >>> >>> jmdc >>> >>> 2013/2/27 Guillermo E. Villanueva <[email protected]> >>> >>> Amigos no puedo encontrar ni en la doc oficial ni en google algo muy >>>> simple, quiero declarar una función de tipo tabla que va a devolver 3 o 4 >>>> datos nada mas en una tabla de una sola columna, esos datos provienen de >>>> unos cálculos >>>> Intenté algo así: >>>> CREATE OR REPLACE FUNCTION mifuncion(parametros) RETURNS table(columna >>>> integer) AS >>>> $BODY$ >>>> declare >>>> li_retorno integer := -1; >>>> li_retorno_ext integer := -1; >>>> ... >>>> ... >>>> >>>> begin >>>> ... >>>> ... >>>> columna := li_retorno; >>>> return next; >>>> if li_retorno_ext <> -1 then >>>> columna := li_retorno_ext; >>>> return next; >>>> end if; >>>> end; >>>> $BODY$ >>>> LANGUAGE plpgsql >>>> >>>> Cuando debería devolver dos filas, me devuelve uno solo, estoy seguro >>>> que esa no es la forma de ir armando fila por fila. Cual sería la forma? >>>> Una tabla temporal adentro de la función? >>>> Desde ya muchas gracias >>>> >>>> Guillermo Villanueva >>>> >>>> >>> >> >
