ayuda con tabla temporal

From: "mario vargas careaga" <mario(dot)vargas(dot)careaga(at)gmail(dot)com>
To: pgsql-es-ayuda <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: ayuda con tabla temporal
Date: 2007-06-01 13:53:36
Message-ID: 5cdf74c90706010653j1cc62588r8064c346971042f0@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

buenlo les pongo todo el codigo por si acaso ....

CREATE OR REPLACE FUNCTION todo()
RETURNS setof record AS
$BODY$declare
resultado record;
begin
create temp table temporal (desorgano char(40),desdistrito char(40),
destipoprestamo char(40),num_pre int,pagos double precision, saldo
double precision);
INSERT INTO temporal (desorgano ,desdistrito , destipoprestamo
,num_pre ,pagos , saldo )
select e.descrip as desorgano,f.descrip as desdistrito,g.descripcion
as destipoprestamo,
a.num_pre,sum(a.trn_imp) as pagos,b.mon_des-sum(a.trn_imp) as saldo
from pre_trn a,prestamo b,rel_idu c,rel_ocu_fun d,organo e,distrito
f,tip_pre g
where a.num_pre=b.num_pre and a.fec_tra<='2007-01-01'
and a.tip_trn=2 and a.baja='0' and a.temporal=0
and b.cod_per=d.cod_per and c.cod_ridu=d.rel_ridu and d.vigente='1'
and c.cod_org=e.cod_org
and c.cod_dis=f.cod_dist and b.cod_tipo=g.cod_tipo
group by e.descrip,f.descrip,g.descripcion,a.num_pre,b.mon_des
union
select e.descrip as desorgano,f.descrip as desdistrito,g.descripcion
as destipoprestamo,
b.num_pre,0 as pagos,b.mon_des as saldo from m_prestamosinpagos b,rel_idu c,
rel_ocu_fun d,organo e,distrito f,tip_pre g
where b.fec_des<='2007-01-01' and b.cod_per=d.cod_per and
c.cod_ridu=d.rel_ridu and d.vigente='1'
and c.cod_org=e.cod_org and c.cod_dis=f.cod_dist and b.cod_tipo=g.cod_tipo
union
select e.descrip as desorgano,f.descrip as desdistrito,h.descripcion
as destipoprestamo,
b.num_pre,0 as pagos,b.mon_des as saldo from prestamo b,rel_idu
c,rel_ocu_fun d,
organo e,distrito f,tip_pre h,
m_fechasminimas g where b.fec_des<='2007-01-01' and
g.fechaminima>'2007-01-01' and b.num_pre=g.num_pre
and b.cod_per=d.cod_per and c.cod_ridu=d.rel_ridu and d.vigente='1'
and c.cod_org=e.cod_org
and c.cod_dis=f.cod_dist and b.cod_tipo=h.cod_tipo;
for resultado in select
desorgano,desdistrito,destipoprestamo,sum(saldo) as total from
temporal group by desorgano,desdistrito,destipoprestamo order by
desorgano,desdistrito,destipoprestamo
loop
return next resultado;
end loop;
return;
drop table temporal;
end;
$BODY$
LANGUAGE 'plpgsql' VOLATILE;
ALTER FUNCTION todo() OWNER TO postgres;

muestra el resultado de la consulta correctamente......
vuelvo a ejecutar la funcion y me da el sgte error.......

ERROR: relation "temporal" already exists
Estado SQL:42P07
Contexto:SQL statement "create temp table temporal (desorgano
char(40),desdistrito char(40), destipoprestamo char(40),num_pre
int,pagos double precision, saldo double precision)"
PL/pgSQL function "todomisaldo" line 4 at SQL statement

bueno esto quiere decir que el drop no se ejecuto porque la tabla
sigue en el catalogo ....

cambio el lugar del drop lo pongo antes del return....

for resultado in select
desorgano,desdistrito,destipoprestamo,sum(saldo) as total from
temporal group by desorgano,desdistrito,destipoprestamo order by
desorgano,desdistrito,destipoprestamo
loop
return next resultado;
end loop;
drop table temporal;
return;
end;

ejecuto......me muestra el resultado de la funcion ...

ejecuto una segunda ves .... y me sale este error...

ERROR: relation with OID 38712593 does not exist
Estado SQL:42P01
Contexto:SQL statement "INSERT INTO temporal (desorgano ,desdistrito ,
destipoprestamo ,num_pre ,pagos , saldo ) select e.descrip as
desorgano,f.descrip as desdistrito,g.descripcion as destipoprestamo,
a.num_pre,sum(a.trn_imp) as pagos,b.mon_des-sum(a.trn_imp) as saldo
from pre_trn a,prestamo b,rel_idu c,rel_ocu_fun d,organo e,distrito
f,tip_pre g where a.num_pre=b.num_pre and a.fec_tra<='2007-01-01' and
a.tip_trn=2 and a.baja='0' and a.temporal=0 and b.cod_per=d.cod_per
and c.cod_ridu=d.rel_ridu and d.vigente='1' and c.cod_org=e.cod_org
and c.cod_dis=f.cod_dist and b.cod_tipo=g.cod_tipo group by
e.descrip,f.descrip,g.descripcion,a.num_pre,b.mon_des union select
e.descrip as desorgano,f.descrip as desdistrito,g.descripcion as
destipoprestamo, b.num_pre,0 as pagos,b.mon_des as saldo from
m_prestamosinpagos b,rel_idu c, rel_ocu_fun d,organo e,distrito
f,tip_pre g where b.fec_des<='2007-01-01' and b.cod_per=d.cod_per and
c.cod_ridu=d.rel_ridu and d.vigente='1' and c.cod_org=e.cod_org and
c.cod_dis=f.cod_dist and b.cod_tipo=g.cod_tipo union select e.descrip
as desorgano,f.descrip as desdistrito,h.descripcion as
destipoprestamo, b.num_pre,0 as pagos,b.mon_des as saldo from prestamo
b,rel_idu c,rel_ocu_fun d, organo e,distrito f,tip_pre h,
m_fechasminimas g where b.fec_des<='2007-01-01' and
g.fechaminima>'2007-01-01' and b.num_pre=g.num_pre and
b.cod_per=d.cod_per and c.cod_ridu=d.rel_ridu and d.vigente='1' and
c.cod_org=e.cod_org and c.cod_dis=f.cod_dist and
b.cod_tipo=h.cod_tipo"
PL/pgSQL function "todomisaldo" line 5 at SQL statement

no se como mas puedo hacer ......la idea es :
1.cree la tabla temporal
2.inserte los registros con un select
3.muestre con una consulta los datos insertados en la tabla temporal
4.dropee la tabla (aqui es donde esta el problema)
Ideas???
gracias ....

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Alvaro Herrera 2007-06-01 14:22:47 Re: Busqueda de duplicados, con demora.
Previous Message mario vargas careaga 2007-06-01 13:47:54 Re: mi cursor no encuentra fin de archivo...