RE: RE: Funciòn que devuelve un refcursor

From: ALFONSO REYES <alfonsoreyescruz(at)hotmail(dot)com>
To: Alvaro herrera 2 <alvherre(at)alvh(dot)no-ip(dot)org>, Alvaro Herrera <alvherre(at)commandprompt(dot)com>
Cc: <mlortiz(at)estudiantes(dot)uci(dot)cu>, lista ayuda postgres <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: RE: RE: Funciòn que devuelve un refcursor
Date: 2008-12-09 01:49:19
Message-ID: BLU148-W1947251E586AB0C7F9B9D4DFFA0@phx.gbl
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda


Haber hice otras pruebas y al parecer el problema es porque no se almacena el cursor dentro de la variable record v_rec

me sale este erorr

ERROR: record "v_rec" has no field "id_persona"
CONTEXT: PL/pgSQL function "fac_obt_cab_factura" line 13 at IF

A pesar de que si le estoy almacenando el cursor dentro del record:

loop
fetch v_cur_resultado into v_rec;
if v_rec.id_persona=4 then
v_mensaje:='Ok';
end if;

-- raise notice 'valor de cursor: %', v_rec.primer_nombre;
EXIT WHEN NOT FOUND;

end loop;

Si alguien tiene una solución o idea es bienvenida.

From: alfonsoreyescruz(at)hotmail(dot)com
To: alvherre(at)alvh(dot)no-ip(dot)org; alvherre(at)commandprompt(dot)com
CC: mlortiz(at)estudiantes(dot)uci(dot)cu; pgsql-es-ayuda(at)postgresql(dot)org
Subject: RE: [pgsql-es-ayuda] RE: Funciòn que devuelve un refcursor
Date: Tue, 9 Dec 2008 01:33:36 +0000

Por cierto cuando hago que la funcion danmaf.per_sp_obt_persona( '1711837219', null, null, null,'v_cur_resultado');, retorne un setof, me da un error al momento de ejecutar la función actualmente este es el código de la funcion:

Nuevamente gracias de antemano por su ayuda.

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;
-- return;
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;

From: alfonsoreyescruz(at)hotmail(dot)com
To: alvherre(at)alvh(dot)no-ip(dot)org; alvherre(at)commandprompt(dot)com
CC: mlortiz(at)estudiantes(dot)uci(dot)cu; pgsql-es-ayuda(at)postgresql(dot)org
Subject: RE: [pgsql-es-ayuda] RE: Funciòn que devuelve un refcursor
Date: Tue, 9 Dec 2008 01:19:32 +0000

Estimados

Aca reprtandome nuevamente con este problema haber si me ayudan nuevamente....

Como avances les comento que ya logre hacer que la función corra pero no se porque razon la varible v_rec con el campo id_persona no tiene valor a pesar que el depurador me dice que si tiene 1 regsitro

LA FUNCIÓN cdevuelve un refcursor

A continuaciòn anexo el código de la función:

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 refcursor;
v_rec record;
v_mensaje varchar(10);
BEGIN

begin
open v_cur_resultado for
SELECT danmaf.per_sp_obt_persona( '1711837219', null, null, null,'v_cur_resultado');

loop
fetch v_cur_resultado into v_rec;

EXIT WHEN NOT FOUND;
if v_rec.id_persona=4 then
v_mensaje:='Ok';
end if;
end loop;

end;

END;
$body$
LANGUAGE 'plpgsql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER;

Cualquier ayuda se agradece,

> Date: Mon, 8 Dec 2008 14:22:29 -0300
> From: alvherre(at)alvh(dot)no-ip(dot)org
> To: alfonsoreyescruz(at)hotmail(dot)com
> CC: mlortiz(at)estudiantes(dot)uci(dot)cu; pgsql-es-ayuda(at)postgresql(dot)org
> Subject: Re: [pgsql-es-ayuda] RE: Funciòn que devuelve un refcursor
>
> ALFONSO REYES escribió:
> >
> >
> > Marcos, muchas gracias por tú ayuda, pero a lo que me refiero es como debería jecutarla desde el query builder, por ejemplo a las
> > funciones que retirnan un refcursor se las ejecuta asi:
> > Begin;
> > select funcion('resp_ref_cursor');
> > fecth all in "resp_ref_cursor";
> > commit;
> >
> > En cambio cuando es un afunción de tipo record como la ejecuto desde el query builder..
>
> select * from function( ... )
>
> Si es "setof record" entonces tienes que especificar el tipo del record:
>
> select * from function( ... ) as f(a int, b text, c text, ...)
>
> --
> Alvaro Herrera http://www.PlanetPostgreSQL.org/
> "I'm impressed how quickly you are fixing this obscure issue. I came from
> MS SQL and it would be hard for me to put into words how much of a better job
> you all are doing on [PostgreSQL]."
> Steve Midgley, http://archives.postgresql.org/pgsql-sql/2008-08/msg00000.php
> --
> TIP 3: Si encontraste la respuesta a tu problema, publícala, otros te lo agradecerán

Invite your mail contacts to join your friends list with Windows Live Spaces. It's easy! Try it!
Discover the new Windows Vista Learn more!
_________________________________________________________________
News, entertainment and everything you care about at Live.com. Get it now!
http://www.live.com/getstarted.aspx

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Alvaro Herrera 2008-12-09 02:58:54 Re: RE: Funciòn que devuelve un refcursor
Previous Message ALFONSO REYES 2008-12-09 01:33:36 RE: RE: Funciòn que devuelve un refcursor