Re: Function que retorna una tabla

From: Calabaza <calalinux(at)gmail(dot)com>
To: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Function que retorna una tabla
Date: 2009-02-23 12:47:08
Message-ID: 958993320902230447j19b2cd2fx2845c40a74025da1@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

El día 23 de febrero de 2009 8:49, Conrado Blasetti
<conrado(at)mapfre(dot)com(dot)ar> escribió:
> -----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
> --
> TIP 9: visita nuestro canal de IRC #postgresql-es en irc.freenode.net
>

> Gracias Calabaza, he visto el tema de los cursores,
> pero en realidad, está simplificado mi ejemplo...

1er Problema:
> básicamente tengo que loopear una determinada tabla,
> manipular los datos de cada registros y luego
> hacer el return de ciertos datos _cocinados_.

2do Problema:
> Otra cosa que necesito, es agregar returns con datos
> especificos o sea, return algo, algo.

3er Problema:
> Por otro lado, si, una vez que pueda hacer
> select * from my_funcion(), la necesito joinear con otras.

Bueno según lo que dices tienes 3 problemas, me parece mejor,
salvo mejor parecer de algun compañero de la lista, para los casos 1 y
2, hacerlo en funciones separadas, y unificar el resultado desde el
lado del cliente.

Y para el tercer caso, apenas tenga un tiempito
hago mis pruebas y te cuento..

Un Abrazo.
--
§~^Calabaza^~§ from Villa Elisa, Paraguay

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Calabaza 2009-02-23 12:49:47 Re: Sistemas de auditoria para PostgreSQL
Previous Message Emanuel Calvo Franco 2009-02-23 12:29:15 Re: Tipo de Dato