El día 18 de abril de 2013 04:01, Jorge Tornero - Listas <jtorlis...@gmail.com> escribió: > Estimados usuarios de la lista: > > Con la idea de no tener que repetir sistemáticamente una consulta bastante > larga, la he introducido en el interior de una función de manera que sólo > necesito invocarla con uno o dos parámetros para obtener el resultado > deseado. La función es: > > CREATE OR REPLACE FUNCTION difbpm(mes int,puer varchar,espc varchar default > '10156',espec varchar default 'ANE') > RETURNS TABLE(barco varchar,peso_sireno numeric,peso_hventa numeric, > diferencia numeric) > AS $$ > BEGIN > RETUNR QUERY > WITH > sireno as( > SELECT > bardes as barco, > sum(pvivo) as peso > from cap2012 > WHERE > mes(fecha)=$1 > and puedes=$2 > and espcod=$3 > GROUP BY 1 > ), > hojas as( > SELECT > nombre_buque as barco, > sum(pesoventa) as peso > from hventa > WHERE > al3=$4 > and puerto_desembarque=$2 > and mes(fecha_venta)=$1 > GROUP BY 1) > > SELECT > sireno.barco as barco, > sireno.peso as peso_sireno, > hojas.peso as peso_hventa, > sireno.peso-hojas.peso as diferencia > FROM > sireno,hojas > WHERE > sireno.barco=hojas.barco and > sireno.peso!=hojas.peso > order by 1; > END; > $$ > LANGUAGE 'plpgsql'; > > Ahora bien, si yo simplemente invoco la función como; > > triki-triki=# select difbpm(7,'NUEVA YORK'); > > Obtengo como resultado: > > difbpm > --------------------------------------------------- > ("EL CHUBASCO",378.000,644.00,-266.000) > ("EL COMIA",13601.000,13979.00,-378.000) > ("NUEVO SIRENA MAR",16737.000,18123.00,-1386.000) > > En lugar de la versión más apropiada que obtengo mediante > > triki-triki=# select * from difbpm(7,'NUEVA YORK'); > > barco | peso_sireno | peso_hventa | diferencia > ------------------+-------------+-------------+------------ > EL CHUBASCO | 378.000 | 644.00 | -266.000 > EL COMIA | 13601.000 | 13979.00 | -378.000 > NUEVO SIRENA MAR | 16737.000 | 18123.00 | -1386.000 > > He estado mirando en google pero creo que, en principio, he hecho las cosas > correctamente, no sé si existe alguna manera de que la función devuelva la > tabla pura y dura, en lugar de esa suerte de tupla en bruto. > ¿Existe alguna solución?
Que significa para vos SELECT difbpm(7,'NUEVA YORK');? Digo, pensado desde el punto de vista del lenguaje SQL, es distinto a SELECT * FROM tabla;. -- Martín Marqués select 'martin.marques' || '@' || 'gmail.com' DBA, Programador, Administrador - Enviado a la lista de correo pgsql-es-ayuda (pgsql-es-ayuda@postgresql.org) Para cambiar tu suscripci�n: http://www.postgresql.org/mailpref/pgsql-es-ayuda