From: | ALFONSO REYES <alfonsoreyescruz(at)hotmail(dot)com> |
---|---|
To: | <mlortiz(at)estudiantes(dot)uci(dot)cu> |
Cc: | lista ayuda postgres <pgsql-es-ayuda(at)postgresql(dot)org>, Alvaro herrera 2 <alvherre(at)alvh(dot)no-ip(dot)org> |
Subject: | RE: RE: Funciòn que devuelve un refcursor |
Date: | 2008-12-08 17:20:23 |
Message-ID: | BLU148-W3BEE03F8A35D925CC6D4ADFFD0@phx.gbl |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
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..
Gracias a todos por su valiosa ayuda
Date: Mon, 8 Dec 2008 05:05:15 -0500
From: mlortiz(at)estudiantes(dot)uci(dot)cu
To: alfonsoreyescruz(at)hotmail(dot)com
CC: pgsql-es-ayuda(at)postgresql(dot)org; alvherre(at)alvh(dot)no-ip(dot)org
Subject: Re: [pgsql-es-ayuda] RE: Funciòn que devuelve un refcursor
hay una vista en el pgadmin que te permite hacer esto: Query Browser, donde puedes ejecutar no sólo consultas sino también los procedimientos que hayas hecho. Si te da algún problema: puedes entonces correrlo dentro del psql:
@- psql tu_database
Teniendo guardada la funcion en un .sql puedes correrlo con :
\i archivo.sql;
y te daria los resultados.
PD: Para esto es bueno siempre programar las funciones de la forma: CREATE OR REPLACE FUNCTION funcion, en caso de que quieras volverla a correr.
saludos
----- Mensaje original -----
De: "ALFONSO REYES" <alfonsoreyescruz(at)hotmail(dot)com>
Para: "Alvaro herrera 2" <alvherre(at)alvh(dot)no-ip(dot)org>
CC: "lista ayuda postgres" <pgsql-es-ayuda(at)postgresql(dot)org>
Enviados: Lunes, 8 de Diciembre de 2008 9:03:43 (GMT-0500) Auto-Detected
Asunto: RE: [pgsql-es-ayuda] RE: Funciòn que devuelve un refcursor
Perdon la función que envie, no es la correcta, ya le corregi y cuando la depuro funciona correctamente, pero no se como ejecutarla desde el pgadmin.
From: alfonsoreyescruz(at)hotmail(dot)com
To: alvherre(at)alvh(dot)no-ip(dot)org
CC: pgsql-es-ayuda(at)postgresql(dot)org
Subject: RE: [pgsql-es-ayuda] RE: Funciòn que devuelve un refcursor
Date: Sun, 7 Dec 2008 20:07:12 +0000
Alvaro muchas gracias la función quedo como te indico a continuación, debo hacer que sea de tipo record? o esta bien asi...
Disculpa el abuso pero quisera aprovechar el problema para aclarar las dudas
y disculpa la ignoracia cual es la diferencia entre una funcion "set of record" y una funciòn "set of refcursor"
Y podrias indicarme como hago que se ejecute en el pgadmin ya que me sale este error cuando la quiero ejecutar:
ERROR: se llamó una función que retorna un conjunto en un contexto que no puede aceptarlo
CONTEXT: PL/pgSQL function "per_sp_obt_persona" line 54 at RETURN NEXT
Mil gracias nuevamente..
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 SETOF "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 next 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 next p_cur_resultado;
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,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.razon_social like '%'||upper(p_razon_social)||'%'
and (d.tipo = 'O' or d.tipo is null);
return next p_cur_resultado;
end if;
END;
$body$
LANGUAGE 'plpgsql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER;
> Date: Sun, 7 Dec 2008 17:01:26 -0300
> From: alvherre(at)alvh(dot)no-ip(dot)org
> To: alfonsoreyescruz(at)hotmail(dot)com
> CC: pgsql-es-ayuda(at)postgresql(dot)org
> Subject: Re: [pgsql-es-ayuda] RE: Funciòn que devuelve un refcursor
>
> ALFONSO REYES escribió:
> >
> >
> > Estimado Alvaro
> >
> > Ok muchas gracias por tú interes, disculpa ya cambie la función para
> > que me retorne un set of, puedes indicarme los pasos para leer ese
> > conjunto desde la otra función ...
>
> Simplemente usa
>
> DECLARE
> r record;
> BEGIN
> FOR r IN SELECT la_funcion()
> LOOP
> -- hacer algo aquí con r.*
> END LOOP;
> END
>
>
> --
> Alvaro Herrera http://www.amazon.com/gp/registry/3BP7BYG9PUGI8
> "I would rather have GNU than GNOT." (ccchips, lwn.net/Articles/37595/)
Explore the seven wonders of the world Learn more!
Connect to the next generation of MSN Messenger Get it now!
--
""A mí Windows nunca se me ha colgado"
"Pinocho..
Marcos Ortiz ValmasedaLinux User # 418229
Debian && OpenSUSE proud user
_________________________________________________________________
Discover the new Windows Vista
http://search.msn.com/results.aspx?q=windows+vista&mkt=en-US&form=QBRE
From | Date | Subject | |
---|---|---|---|
Next Message | Alvaro Herrera | 2008-12-08 17:22:29 | Re: RE: Funciòn que devuelve un refcursor |
Previous Message | Gunnar Wolf | 2008-12-08 16:30:04 | Re: Lineas de comando en linux para respaldar y restaurar en postgres |