From: | Martín Marqués <martin(dot)marques(at)gmail(dot)com> |
---|---|
To: | Jorge Tornero - Listas <jtorlistas(at)gmail(dot)com> |
Cc: | pgsql-es-ayuda <pgsql-es-ayuda(at)postgresql(dot)org> |
Subject: | Re: [pgsql-es-ayuda] Función que retorna tabla |
Date: | 2013-04-18 12:17:21 |
Message-ID: | CABeG9LtwFKsuw9nLZF9B5i5bGyj11g9OV=d2j4Ys1jktZG9NJQ@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
El día 18 de abril de 2013 04:01, Jorge Tornero - Listas
<jtorlistas(at)gmail(dot)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(at)postgresql(dot)org)
Para cambiar tu suscripcin:
http://www.postgresql.org/mailpref/pgsql-es-ayuda
From | Date | Subject | |
---|---|---|---|
Next Message | Crispin T. | 2013-04-18 13:25:46 | Re: [pgsql-es-ayuda] Función que retorna tabla |
Previous Message | Jorge Tornero - Listas | 2013-04-18 07:01:21 | Función que retorna tabla |