RE: Function que retorna una tabla

From: "Conrado Blasetti" <conrado(at)mapfre(dot)com(dot)ar>
To: <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: RE: Function que retorna una tabla
Date: 2009-02-23 11:49:34
Message-ID: 76A99F19229DC440909CF1B905F8012C0790A898@sar001998.Mapfre.ar
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Gracias Calabaza, he visto el tema de los cursores, pero en realidad, está simplificado mi ejemplo... básicamente tengo que loopear una determinada tabla, manipular los datos de cada registros y luego hacer el return de ciertos datos _cocinados_. Otra cosa que necesito, es agregar returns con datos especificos o sea, return algo, algo.
Por otro lado, si, una vez que pueda hacer select * from my_funcion(), la necesito joinear con otras.

-----Mensaje original-----
De: pgsql-es-ayuda-owner(at)postgresql(dot)org [mailto:pgsql-es-ayuda-owner(at)postgresql(dot)org] En nombre de Calabaza
Enviado el: Lunes, 23 de Febrero de 2009 09:43 a.m.
Para: pgsql-es-ayuda(at)postgresql(dot)org
Asunto: Re: [pgsql-es-ayuda] Function que retorna una tabla

El día 23 de febrero de 2009 7:47, Conrado Blasetti
<conrado(at)mapfre(dot)com(dot)ar> escribió:
> Gente, buenos días.
>
> Bueno, esto tema de seguro se habrá tocado,
> pero no logro dar con lo que necesito.
> La function que necesito es la que devuelve valores en registros:

> Dentro de ella quiero devolver N filas del tipo
> ej: codigo NUMERIC, descripción VARCHAR(30)

Puedes mirar la sección 38.7.3.5. Returning Cursors de esta pagina:
http://www.postgresql.org/docs/8.3/interactive/plpgsql-cursors.html

Y esta otra también...
http://www.postgresql.org/docs/8.3/interactive/sql-declare.html

> Pero esta devolución la hago loopeando una tabla
> y retornando valores a manos.

> La idea es joinearla en sql.

¿disculpa, pero no entiendo, Quieres hacer un join con el resultado?

>
> Ej:
>
>
> Create or replace function test() returns ????? as
> $$
> Declare
> C1 record;
> Begin
> For c1 in (select codigo, descripcion from tabla) loop
> Return c1.codigo, c1.descripcion;
> o
> Return next c1.codigo, c1.descripcion;
> --LEI POR AHÍ, QUE ESTO DEBO HACERLO CON WHILE Y NO CON FOR, PUEDE SER?
> End loop;
>
> --ACA QUIERO POR EJEMPLO, DEVOLVER VALORES A MANO
> Return next 999, 'CODIGO MANUAL';
>
> --ACA QUIERO LLAMAR A UNA FUNCION Y QUE ELLA DEVUELVA UN REGISTRO
> --DEL MISMO TIPO
> Return f_devolver_codigo_descripcion;
> End;
> $$ language 'plpgsql'

> Lo ideal es poder hacer estas 3 cosas, en realidad,
> en la function tengo que hacer estas cosas.

Bueno creo que puedes usar union para armar tu sql
que luego le pasaras a tu cursor para crearlo:

select 888 as codigo, 'lo que viene de la tabla' as descripcion
union
(Select 999 as codigo, 'CODIGO MANUAL' as descripcion)
union
(Select 777 as codigo, 'Lo que viene de la fucnion' as descripcion)

Puedes ver: http://www.postgresql.org/docs/8.3/interactive/queries-union.html

> Bueno, la verdad, no encuentro la forma de poder armar
> esta function y que pueda devolver registro

> y que a su vez la pueda joinear en una sentencia sql
esto de joinear sigo sin entenderlo todavía...

> Desde ya, muchas gracias.

Ok, Un abrazo...

> Saludos,
> Conrado
>
> --
> TIP 2: puedes desuscribirte de todas las listas simultáneamente
> (envía "unregister TuDirecciónDeCorreo" a majordomo(at)postgresql(dot)org)

--
§~^Calabaza^~§ from Villa Elisa, Paraguay
--
TIP 8: explain analyze es tu amigo

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Emanuel Calvo Franco 2009-02-23 11:58:41 Re: Sistemas de auditoria para PostgreSQL
Previous Message Calabaza 2009-02-23 11:42:47 Re: Function que retorna una tabla