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: [EMAIL PROTECTED] To: [EMAIL PROTECTED] CC: pgsql-es-ayuda@postgresql.org; [EMAIL PROTECTED] 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" <[EMAIL PROTECTED]> Para: "Alvaro herrera 2" <[EMAIL PROTECTED]> CC: "lista ayuda postgres" <pgsql-es-ayuda@postgresql.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: [EMAIL PROTECTED] To: [EMAIL PROTECTED] CC: pgsql-es-ayuda@postgresql.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: [EMAIL PROTECTED] > To: [EMAIL PROTECTED] > CC: pgsql-es-ayuda@postgresql.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