From: | ALFONSO REYES <alfonsoreyescruz(at)hotmail(dot)com> |
---|---|
To: | <pgsql-es-ayuda(at)postgresql(dot)org> |
Subject: | Como utilizar una funcion que retorna un refcursor dentro otra función o SP |
Date: | 2008-12-03 03:05:55 |
Message-ID: | BLU148-W377CE2A05589EDB8E84AC5DF030@phx.gbl |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
Estimada Lista
Estado dandole lucha, caña al asunto pero no tengo idea de como realizarlo.... haber la cosa va así, tengo una función que meretorna un refcursor de las personas en base a una busqueda:
CREATE OR REPLACE FUNCTION "danmaf"."per_sp_obt_persona" (p_identificacion varchar, p_primer_nombre varchar, p_apellido_paterno varchar, p_razon_social varchar, p_cur_resultado "pg_catalog"."refcursor") RETURNS "pg_catalog"."refcursor" AS
$body$
declare
v_persona INTEGER;
v_desc_error "varchar"(200);
BEGIN
begin
select count(1)
into v_persona
from danmaf.per_personas p
where (p.identificacion=upper(p_identificacion) or upper(p_identificacion) is null)
and (p.primer_nombre=upper(p_primer_nombre) or upper(p_primer_nombre) is null)
and (p.apellido_paterno=upper(p_apellido_paterno) or upper(p_apellido_paterno) is null)
and (p.razon_social like '%'||upper(p_razon_social)||'%' or upper(p_razon_social) is null);
if v_persona=0 then
open p_cur_resultado
FOR select '-1403' as codigo, 'Error persona no se encuentra Registrada CI';
return p_cur_resultado;
end if;
end;
if p_razon_social is null then
open p_cur_resultado FOR
select p.id_persona,p.identificacion,p.razon_social,p.primer_nombre,p.segundo_nombre,p.apellido_paterno,
p.apellido_materno,tel.numero,d.direccion,p.sexo,p.tipo_persona,p.tipo_identificacion,p.fecha_nacimiento,p.contribuyente_esp
from danmaf.per_telefono tel right join
danmaf.per_personas p on (tel.id_persona=p.id_persona ) left join danmaf.per_direcciones d on (p.id_persona=d.id_persona )
where (p.identificacion=upper(p_identificacion) or upper(p_identificacion) is null)
and (p.primer_nombre=upper(p_primer_nombre) or upper(p_primer_nombre) is null)
and (p.apellido_paterno=upper(p_apellido_paterno) or upper(p_apellido_paterno) is null)
and (d.tipo ='D' or d.tipo is null)
and (tel.tipo ='D' or tel.tipo is null);
return p_cur_resultado;
--return;
else
open p_cur_resultado FOR
select p.id_persona,p.identificacion,p.razon_social,p.primer_nombre,p.segundo_nombre,p.apellido_paterno,
p.apellido_materno,tel.numero,d.direccion
from danmaf.per_telefono tel right join
danmaf.per_personas p on (tel.id_persona=p.id_persona ) left join danmaf.per_direcciones d on (p.id_persona=d.id_persona )
where p.razon_social like upper(p_razon_social)||'%'
and (d.tipo = 'O' or d.tipo is null);
return p_cur_resultado;
--return;
end if;
END;
$body$
LANGUAGE 'plpgsql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER;
Esta función la utilizo ya sin ningun problemas desde la consolo sql y funciona ahora lo que necesito es hacer la llamada dentro de otro sp o funcion esto para que me busque las facturas por persona :
CREATE OR REPLACE FUNCTION "danmaf"."fac_obt_cab_factura" (p_identificacion integer, p_fact_fisica varchar, p_fecha date, p_primer_nombre varchar, p_apellido_paterno varchar, p_razon_social varchar) RETURNS "pg_catalog"."refcursor" AS
$body$
DECLARE
v_cur_resultado pg_catalog.refcursor;
BEGIN
begin
select danmaf.per_sp_obt_persona( p_identificacion, p_primer_nombre, p_apellido_paterno, p_razon_social, v_cur_resultado);
end;
END;
$body$
LANGUAGE 'plpgsql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER;
Ahora el problema es como leo o recorro los datos de la función per_sp_obt_persona dentro de la otra? para luego con el id_persona hacer una busqueda dentro de la cabecera factura...
Espero su ayuda y muchas gracias de antemano por su valiosa ayuda. :)
_________________________________________________________________
Connect to the next generation of MSN Messenger
http://imagine-msn.com/messenger/launch80/default.aspx?locale=en-us&source=wlmailtagline
From | Date | Subject | |
---|---|---|---|
Next Message | Guido Barosio | 2008-12-03 03:15:50 | Fwd: [pgsql-slavestothewww] Updated list of lists |
Previous Message | ALFONSO REYES | 2008-12-03 02:56:28 | RE: tareas programadas (jobs) |