Re: 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: Re: Store procedure para retorar consulta
Date: 2013-09-10 17:03:29
Message-ID: CAM6fARxcHHpjjqtjm8uX1C+mLVi+rKSn=3nzLamq4YYWtyHGDg@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Encontre el hilo, anterior e hice los cambios:

CREATE OR REPLACE FUNCTION prueba1(character, character, character,
character)
RETURNS table
(r_grup character, r_ncom character, r_fcon date, r_deta varchar,
t_des1 varchar, r_tdoc character, r_seri character, r_ndoc character,
r_mone character, r_tasa numeric, r_esta character, val_grav numeric,
val_ngrav numeric, val_igv numeric, val_tot numeric)
AS

y RETURN QUERY antes deSELECT, .

Funciona y pero me retorna en una sola columna todos los campos separados
con comillas, ... lo que queria es que me muestre cada uno en una columna
tal como se hiciera una consulta en consola

Felipe

El 10 de septiembre de 2013 09:18, Felipe Araoz Ramos
<faraoz(at)gmail(dot)com>escribió:

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

--
*Felipe Araoz Ramos*
RPM #941990605 / 941990605
RPC 992760385
NXT 822*9500 / 998229500

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Gilberto Castillo 2013-09-10 17:06:13 Re: Store procedure para retorar consulta
Previous Message Ferrel Navia 2013-09-10 16:03:55 Re: Store procedure para retorar consulta