Store procedure para retorar consulta

From: Felipe Araoz Ramos <faraoz(at)gmail(dot)com>
To: PostgreSQL-foro <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Store procedure para retorar consulta
Date: 2013-09-10 14:18:05
Message-ID: CAM6fARzVy0cgghJDU-c_scR56XkyfbRms=YDH0ZV+o-Q42oX9A@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Necesito hacer una Stored procedure que me devuelva registros según los
parámetros enviados:
Select regvtacmp('01','2013','01',02') .....donde los parámetros son
código empresa, año mes, código registro.

He creado esta función:

CREATE OR REPLACE FUNCTION regvtacmp(character, character, character,
character)

RETURNS SETOF record AS

$BODY$

declare

x_empr alias for $1;

x_anop alias for $2;

x_mesp alias for $3;

x_treg alias for $4;

begin

SELECT fprcab.r_grup, fprcab.r_ncom, fprcab.r_fcon, fprcab.r_deta,
fptabl.t_des1, fprcab.r_tdoc, fprcab.r_seri, fprcab.r_ndoc,
fprcab.r_mone, fprcab.r_tasa, fprcab.r_esta,

SUM(CASE WHEN fprdet.r_elem = '01' THEN fprdet.r_impn ELSE 0 END) AS
val_grav,

SUM(CASE WHEN fprdet.r_elem <> '90' and fprdet.r_elem<> '99' and
fprdet.r_elem<> '01' THEN fprdet.r_impn ELSE 0 END) AS val_ngrav,

SUM(CASE WHEN fprdet.r_elem = '90' THEN fprdet.r_impn ELSE 0 END) AS
val_igv,

SUM(CASE WHEN fprdet.r_elem = '99' THEN fprdet.r_impn ELSE 0 END) AS
val_tot

FROM fprcab

INNER JOIN fprdet ON

fprcab.r_grup = fprdet.r_grup AND

fprcab.r_ncom = fprdet.r_ncom

INNER JOIN fptabl on

fptabl.t_tipo = fprcab.r_tane and

fptabl.t_elem = fprcab.r_anex

WHERE

fprdet.r_empr = x_empr AND

fprdet.r_anop = x_anop AND

fprdet.r_mesp = x_mesp AND

fprdet.r_treg = x_treg

GROUP BY

fprcab.r_grup, fprcab.r_ncom, fprcab.r_fcon, fprcab.r_deta,
fptabl.t_des1, fprcab.r_tdoc, fprcab.r_seri, fprcab.r_ndoc,
fprcab.r_mone, fprcab.r_tasa, fprcab.r_esta

ORDER BY

r_grup, r_ncom;

end;

$BODY$

LANGUAGE plpgsql VOLATILE

Pero me devuleve el siguiente error.

ERROR: la consulta no tiene un destino para los datos de resultado
HINT: Si quiere descartar los resultados de un SELECT, utilice PERFORM.
CONTEXT: función PL/pgSQL
regvtacmp(character,character,character,character) en la línea 8 en
sentencia SQL

********** Error **********

ERROR: la consulta no tiene un destino para los datos de resultado
Estado SQL:42601
Sugerencias:Si quiere descartar los resultados de un SELECT, utilice
PERFORM.
Contexto:función PL/pgSQL
regvtacmp(character,character,character,character) en la línea 8 en
sentencia SQL

Cual seria la forma adecuada de colocar el destino dentro de la función, lo
que quiero es que me devuelva la consulta según los parámetros como como
lo haría directamente en consola con select .....

A la espera de su ayuda

*Felipe*

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Felipe Araoz Ramos 2013-09-10 15:26:14 Re: Store procedure para retorar consulta
Previous Message Manuel Fernando Aller 2013-09-09 16:33:47 Re: vistas materializadas postgres 9.3