El día 23 de febrero de 2009 8:49, Conrado Blasetti <conr...@mapfre.com.ar> escribió: > -----Mensaje original----- > De: pgsql-es-ayuda-ow...@postgresql.org > [mailto:pgsql-es-ayuda-ow...@postgresql.org] En nombre de Calabaza > Enviado el: Lunes, 23 de Febrero de 2009 09:43 a.m. > Para: pgsql-es-ayuda@postgresql.org > Asunto: Re: [pgsql-es-ayuda] Function que retorna una tabla > > El día 23 de febrero de 2009 7:47, Conrado Blasetti > <conr...@mapfre.com.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 majord...@postgresql.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 -- TIP 1: para suscribirte y desuscribirte, visita http://archives.postgresql.org/pgsql-es-ayuda