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
>>>>
>>>>
>>>
>>
>

Responder a