From: | "Maria Eugenia Paradas Mendez" <mpm_maru(at)hotmail(dot)com> |
---|---|
To: | pgsql-es-ayuda(at)postgresql(dot)org |
Subject: | Re: "ayuda de vistas" |
Date: | 2006-05-29 15:10:26 |
Message-ID: | BAY118-F14F7D37D9DA15CFD6CF05DEB9D0@phx.gbl |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
Buenos Dias, esta es la respuesta al correo de Jaime que pidio que le
enviara la copia de la funcion que genera la vista, yo llamo esta funcion
dentro de un ciclo de iteracion para realizar calculos sobre la misma y
luego debolverlos en un tipo de dato creado por mi pero el tipo de dato
siempre me devuelve el resultado de la primera iteracion en todas las demas
y lo mas extrano es que me autoaliza la vista
ESTA ES LA FUNCION QUE ME GENERA LA VISTA:
CREATE OR REPLACE FUNCTION valobtsolprovsubran(_varchar) RETURNS integer AS
$$
--Maria Eugenia Paradas
--17/05/2006
--Las entradas a suministrar son: id del reporte, el rif del proveedor, la
fecha inicial del rango y la fecha final
--Crea una vista con todas las solicitudes en el rango seleccionado y
retorna un contador de cuantas.
DECLARE
arre $1%TYPE := $1;
prov varchar:= arre[2];
ini date:= (CAST(arre[3] AS date));
fin date:= (CAST(arre[4] AS date));
var varchar:= 'CREATE OR REPLACE VIEW vista_sol_pro_ran AS SELECT s.*
FROM solpeda_prov s, relprodprov r WHERE ((s.fecha >=
'''||ini||''')and(s.fecha <='''|| fin||''')) and (s.relprodprov =
r.relprodprov) and (r.rifprov ='''|| prov||''') order by(codsolped) ASC';
BEGIN
execute var;
return (select count(*) from (SELECT distinct on (vs.nropedido, vs.origen)
vs.codsolped FROM vista_sol_pro_ran vs) as foo);
END;
$$ LANGUAGE 'plpgsql';
Y AQUI LA FINCION QUE LA LLAMA
--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;
arresub date[];
cont integer:=2;
fecsol varchar;
freport fila;
prueba _varchar;
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 '1maru';
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)); AQUI SE REALZA LA LLAMADA
if (sol =0) then
raise exception 'chao';
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 as fecha,sol as solic,ate as atend,pen as
pendi ,mod as modif,aut as autor,des as despa,monori as monto;
return next freport;
/*if cont= 4 then
raise exception '%', sol;
end if;*/
end if;--existen solicitudes subrango
cont:= cont +2;
--if (cont<>(array_upper(arresub,1))) then
-- drop view vista_sol_pro_subran;
--END IF;
end loop; -- fin de ciclo de subrangos
end if;--existen solicitudes rango
end if;--proveedor
end if;--rango fechas
return ;
END;
$$ LANGUAGE 'plpgsql';
agradeciendo de antemano Maria E Paradas
_________________________________________________________________
Visita MSN Latino Noticias: Todo lo que pasa en el mundo y en tu paín, ¡en
tu idioma! http://latino.msn.com/noticias/
From | Date | Subject | |
---|---|---|---|
Next Message | Julio Rivero | 2006-05-29 15:13:32 | Retornar valores de varias tablas |
Previous Message | O§Kr | 2006-05-29 15:08:30 | hola |