Estimada Lista

Por favor si alguien me puede ayudar con algun ejemplo, comentario, 
sugerencia....

Gracias
From: [EMAIL PROTECTED]
To: [email protected]
Subject: Como utilizar una funcion que retorna un refcursor dentro otra función 
o SP
Date: Wed, 3 Dec 2008 03:05:55 +0000








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   Get it now! 
_________________________________________________________________
Explore the seven wonders of the world
http://search.msn.com/results.aspx?q=7+wonders+world&mkt=en-US&form=QBRE

Responder a