From: | Jorge Tornero - Listas <jtorlistas(at)gmail(dot)com> |
---|---|
To: | pgsql-es-ayuda(at)postgresql(dot)org |
Subject: | Función que retorna tabla |
Date: | 2013-04-18 07:01:21 |
Message-ID: | 516F9A41.5080101@gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
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?
Un saludo y muchas gracias por vuestro tiempo.
Jorge Tornero
Instituto Español de Oceanografía
Centro Oceanográfico de Cádiz
www.ieo.es
Página personal http://imasdemase.com
El 05/05/12 20:20, Sergio Sinuco escribió:
> Puede utilizar pgagent
>
> http://www.pgadmin.org/docs/1.4/pgagent.html
>
>
>
> El 5 de mayo de 2012 12:24, Marcos Michel Martinez Perez
> <mmartinezp(at)estudiantes(dot)uci(dot)cu <mailto:mmartinezp(at)estudiantes(dot)uci(dot)cu>>
> escribió:
>
> como puedo hacer que el postgres me ejecute una funcion cada un
> tiempo determinado
>
> --
> _________________________________________________
> | "Ninguna persona merece tus lágrimas y quién se |
> | las merezca no te hará llorar" |
> | _____________________________________________ |
> | Marcos M. Martínez |
> | UCI - Universidad de las Ciencias Informáticas |
> |_________________________________________________
>
From | Date | Subject | |
---|---|---|---|
Next Message | Martín Marqués | 2013-04-18 12:17:21 | Re: [pgsql-es-ayuda] Función que retorna tabla |
Previous Message | Alvaro Herrera | 2013-04-15 20:13:56 | Re: capturar evento de desconeccion de usuarios. |