ayuda

From: "Maria Eugenia Paradas Mendez" <mpm_maru(at)hotmail(dot)com>
To: pgsql-es-ayuda(at)postgresql(dot)org
Subject: ayuda
Date: 2006-05-25 19:37:14
Message-ID: BAY118-F13E7F2A8DEBB68DBE24C3EB990@phx.gbl
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

por favor necesito ayuda ya que creo una vista dentor de una funcion y esta
me retorna un contador de los registros diferente de la vista para luego
hacer una validacion de que existan

--OBTENER SOLICITUDES DEL SUBRANGO
CREATE OR REPLACE FUNCTION valobtsolprovsubran(_varchar) RETURNS integer AS
$$
--Maria Eugenia Paradas
--18/05/2006
--Las entradas a suministrar son:id,rif del proveedor,la fecha inicial y la
fecha final del subrango
--Crea una vista con todas las solicitudes en el subrango seleccionado y
retorna un contador de cuantas.
DECLARE
arre $1%TYPE := $1;
ini date:= (CAST(arre[2] AS date));
fin date:= (CAST(arre[3] AS date));
var varchar:= 'CREATE OR REPLACE VIEW vista_sol_pro_subran AS SELECT *
FROM vista_sol_pro_ran WHERE ((fecha >='''||ini||''')and(fecha
<='''||fin||''')) order by(codsolped) ASC';
cont integer:= 0;
BEGIN
execute(var);
cont:=(select count(*) from (SELECT distinct on (vs.nropedido,
vs.origen) vs.codsolped FROM vista_sol_pro_subran vs) as foo);
return(cont);
END;
$$ LANGUAGE 'plpgsql';

esta funcion la llamo desde otra y guardo los resultados en un tipo de dato
pero al guardar cada fila siempre me guarda el primer resultado en cada una
e hice las pruebas y se que si las actualiza pero los campos que son de
calculos no, siempre guarda los primeros

--CREAR TIPO DE DATO DE RETORNO DE LA FUNCION CREAR RESUMEN
/*CREATE TYPE fila AS(
fecha varchar,
solic integer,
atend integer,
pendi integer,
modif integer,
autor integer,
despa integer,
monto real
);*/
--CREAR REPORTE DE RESUMEN SEMANAL/MENSUAL
drop function crear_resumen(_varchar);
CREATE OR REPLACE FUNCTION crear_resumen(_varchar) RETURNS setof fila AS $$
--Maria Eugenia Paradas
--18/05/2006
--Las entradas a suministrar son:id del reporte, el rif del proveedor, la
fecha inicial y la fecha final del rango
--Funcion que me realiza los calculos por sub-rango y las totalizaciones por
rango de las solicitudes de pedido.
--Reporte de Resumen de Relacion(Mensual/Semanal).
DECLARE
arre $1%TYPE := $1;
arref _varchar;
arres _varchar;
arrex _varchar;
id varchar:= arre[1];
prov varchar:= arre[2];
sol integer:=0;
mod integer:=0;
ate integer:=0;
pen integer:=0;
aut integer:=0;
des integer:=0;
monori real:=0;
monaut real:=0;
arresub date[];
cont integer:=2;
fecsol varchar;
freport fila;
BEGIN
arref[1]:=arre[3]; arref[2]:=arre[4];
--validar rango
if ((select validar_rango(arref))=true) then
raise exception '1030';
else
--verificar proveedor
if( select existeproveedor(prov)=false) then
raise exception '1003';
--verificar existencia de solicitudes por proveedor
else
if (select valobtsolprovran(arre)=0) then
raise exception '1029';
else --generar subrango
arres[1]:=arre[1]; arres[2]:=arre[3]; arres[3]:=arre[4];
arresub:= (select rango_fecha(arres));
--validar fin de subrangos
while(cont<=(array_upper(arresub,1))) loop
--fecha solicitud (1)
fecsol:= arresub[cont-1]||' al '||arresub[cont];
--verificar existencia de solicitudes en el subrango(2)
arrex[1]:=arre[2]; arrex[2]:=cast(arresub[cont-1] as varchar);
arrex[3]:=cast(arresub[cont] as varchar);
sol:=(select valobtsolprovsubran(arrex));
if (sol =0) then
raise exception '1029';
else
--obtener y calcular autorizadas(6)
aut:= (select obteneryvalidar_solicitudesautorizadassubrango(arre));
--calcular atendidas y pendiente(3,4)
ate:= aut;
pen:= (sol- ate);
--calcular modificadas(5)
mod:= (select calcular_modificadas(arre));
--calcular solicitudes despachada(7)
des:=(select calcular_despachadas(arre));
--obtener monto de las solicitudes originadas(8)
monori:= (select calcular_monto_originado());
--llenar tipo de dato
select into freport fecsol,sol,ate,pen,mod,aut,des,monori; (el prob es
aqui)
return next freport;
end if;--existen solicitudes subrango
cont:= cont +2;
end loop; -- fin de ciclo de subrangos
end if;--existen solicitudes rango
end if;--proveedor
end if;--rango fechas
return;
END;
$$ LANGUAGE 'plpgsql';

_________________________________________________________________
MSN Latino: el sitio MSN para los hispanos en EE.UU. http://latino.msn.com/

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Linder Poclaba 2006-05-25 19:59:48 Re: tamaño de la Base de Datos
Previous Message Miguel 2006-05-25 18:35:39 Re: funcion random()