Función que retorna tabla

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 |
> |_________________________________________________
>

In response to

Responses

Browse pgsql-es-ayuda by date

  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.