Re: Funcion compleja

From: Mario Soto Cordones - Venezuela <msotocl(at)gmail(dot)com>
To: pgsql-es postgresql <pgsql-es-ayuda(at)postgresql(dot)org>
Cc: Alvaro Herrera <alvherre(at)surnet(dot)cl>
Subject: Re: Funcion compleja
Date: 2005-06-17 12:05:18
Message-ID: e9b17cde05061705055acb22bc@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Funcion corregida:

Hola amigos esta es la funcion correjida, la he depurado y esta bien
gramaticalmente, pero al ejecutarle:
select * from compleja(1,2)

dice

ERROR: SELECT query has no destination for result data

Gracias

CREATE OR REPLACE FUNCTION "public"."compleja" (emp integer, fil integer)
RETURNS SETOF "public"."ty_depreciacion" AS
$body$
DECLARE
rs ty_depreciacion%rowtype;
empresa alias for $1;
filial alias for $2;
recA RECORD;
padre public.lquery;
BEGIN
FOR recA IN
SELECT DISTINCT min(contabilidad.refpahi.sq_serialcolumn::integer) As sq
FROM
contabilidad.refpahi
WHERE
id_estado= 'SA' AND
co_empresa= empresa AND
co_filial= filial
GROUP BY contabilidad.refpahi.nu_activo_fijo, contabilidad.refpahi.nu_parent
ORDER BY sq
LOOP

padre := '' || recA.sq || '*.*' || '';

SELECT
p.nu_activo_fijo,
a.nb_activo AS nb_act,
p.nu_componente,
b.nb_activo AS nb_comp,
c.va_cah,
f.fe_adquisicion,
f.fe_capitalizacion,
f.fe_entoper,
d.nu_ano ,
d.nu_mes,
d.va_dm,
d.va_da,
c.ca_vurm,
d.va_vrm,
d.va_vneto,
d.nu_comprobante,
d.nu_documento
FROM contabilidad.refpahi p,
activos a,
activos b,
contabilidad.samadep c,
public.samafeac f,
contabilidad.sahidep d
WHERE
p.id_estado = 'SA' AND
p.co_empresa = empresa AND
p.co_filial = filial AND
path ~ padre AND
a.nu_activo_fijo = p.nu_activo_fijo AND
b.nu_activo_fijo = p.nu_componente AND
c.co_empresa = p.co_empresa AND
c.co_filial = p.co_filial AND
c.co_codigo = p.nu_componente AND
f.co_empresa = p.co_empresa AND
f.co_filial = p.co_filial AND
f.nu_activo_fijo = p.nu_componente AND
d.co_empresa = p.co_empresa AND
d.co_filial = p.co_filial AND
d.co_codigo = p.nu_componente AND
d.nu_ano = 2004 AND d.nu_mes = 01
ORDER BY
path asc, nu_ano desc, nu_mes asc;
END LOOP;

RETURN NEXT rs;
END;
$body$
LANGUAGE 'plpgsql' VOLATILE RETURNS NULL ON NULL INPUT SECURITY INVOKER;

El día 17/06/05, Mario Soto Cordones - Venezuela <msotocl(at)gmail(dot)com>
escribió:
>
> El problema esta creo yo en la asignacion del resultado a la variable
> padre, por eso la declare ahora como tipo:
>
> padre public.lquery;
>
> al depurar la funcion me da:
>
> reca =(sq:92089;) , lo cual es en verdad el primer registro.
>
> Pero al querer asignar el resultado a la variable padre y concatenarla con
> los caracteres
> || '*.*'
>
> Me origina el error
>
> Gracias
>
>
>
> El día 17/06/05, Mario Soto Cordones - Venezuela <msotocl(at)gmail(dot)com>
> escribió:
> >
> > OK. Alvaro gracias, hice lo que me recomendastes y ahora me da otro
> > error:
> >
> > Esa es la funcion:
> >
> > DECLARE
> > rs ty_depreciacion%rowtype;
> > e alias for $1;
> > f alias for $2;
> > recA RECORD;
> > padre varchar;
> > BEGIN
> > FOR recA IN
> > SELECT DISTINCT min(contabilidad.refpahi.sq_serialcolumn::integer) As sq
> > FROM
> > contabilidad.refpahi
> > WHERE
> > id_estado= 'SA' AND
> > co_empresa= e AND
> > co_filial= f
> > GROUP BY contabilidad.refpahi.nu_activo_fijo,
> > contabilidad.refpahi.nu_parent
> > ORDER BY sq
> > LOOP
> >
> > padre := ' ' recA.sq ' ' || '*.*'; -------- aca me da el siguiente error
> > : ERROR: error de sintaxis en o cerca de «$1» en carácter 13
> > -------- padre deberia quedar de esta forma:
> > -------- Si recA.sq, devuelve 123456, entonces padre debe ser
> > '123456*.*'
> >
> > SELECT
> > p.nu_activo_fijo,
> > a.nb_activo AS nb_act,
> > p.nu_componente,
> > b.nb_activo AS nb_comp,
> > c.va_cah,
> > f.fe_adquisicion,
> > f.fe_capitalizacion,
> > f.fe_entoper,
> > d.nu_ano ,
> > d.nu_mes,
> > d.va_dm,
> > d.va_da,
> > c.ca_vurm,
> > d.va_vrm,
> > d.va_vneto,
> > d.nu_comprobante,
> > d.nu_documento
> > FROM contabilidad.refpahi p,
> > activos a,
> > activos b,
> > contabilidad.samadep c,
> > public.samafeac f,
> > contabilidad.sahidep d
> > WHERE
> > p.id_estado ='SA' AND
> > p.co_empresa = e AND
> > p.co_filial = f AND
> > path ~ padre AND
> > a.nu_activo_fijo = p.nu_activo_fijo AND
> > b.nu_activo_fijo = p.nu_componente AND
> > c.co_empresa = p.co_empresa AND
> > c.co_filial = p.co_filial AND
> > c.co_codigo = p.nu_componente AND
> > f.co_empresa = p.co_empresa AND
> > f.co_filial = p.co_filial AND
> > f.nu_activo_fijo = p.nu_componente AND
> > d.co_empresa = p.co_empresa AND
> > d.co_filial = p.co_filial AND
> > d.co_codigo = p.nu_componente AND
> > d.nu_ano =2004 AND d.nu_mes =01
> > ORDER BY
> > path asc, nu_ano desc, nu_mes asc;
> > END LOOP;
> >
> > RETURN NEXT rs;
> > END;
> >
> >
> > Gracias
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> > El día 16/06/05, Alvaro Herrera <alvherre(at)surnet(dot)cl > escribió:
> > >
> > > On Thu, Jun 16, 2005 at 08:52:21PM -0400, Mario Soto Cordones -
> > > Venezuela wrote:
> > >
> > > > FOR recA IN
> > > > select distinct min(contabilidad.refpahi.sq_serialcolumn::integer)
> > > As sq
> > > > from contabilidad.refpahi where id_estado='SA' and co_empresa=1 and
> > > > co_filial=2
> > > > group by contabilidad.refpahi.nu_activo_fijo,
> > > contabilidad.refpahi.nu_parent
> > > > order by sq;
> > > > LOOP
> > >
> > > Sobra el ; despues de "sq" y antes de "loop".
> > >
> > > Una recomendacion -- poner consultas tan grandes sin ninguna ayuda
> > > visual para depurarlas es pesima idea. Te recomiendo aprovechar la
> > > indentacion para, por ej., dejar las palabras clave principales al
> > > principio de la linea (SELECT, FROM, WHERE, GROUP BY, ORDER BY, etc).
> > > Ademas de eso, ponlas con mayusculas para que sean inmediatamente
> > > visibles.
> > >
> > > Te aseguro que mejora muchisimo la velocidad con que puedes aprehender
> > > un trozo de codigo despues de un par de horas de que lo has escrito.
> > >
> > > --
> > > Alvaro Herrera (<alvherre[a]surnet.cl>)
> > > "Cada quien es cada cual y baja las escaleras como quiere" (JMSerrat)
> > >
> >
> >
> >
> > --
> > cordialmente,
> >
> > Ing. Mario Soto Cordones
>
>
>
>
> --
> cordialmente,
>
> Ing. Mario Soto Cordones
>

--
cordialmente,

Ing. Mario Soto Cordones

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Mario Soto Cordones - Venezuela 2005-06-17 12:07:07 Re: como Agregar plpgsql
Previous Message Mario Soto Cordones - Venezuela 2005-06-17 11:36:40 Re: Funcion compleja