Ver Mensaje Individual
  #1 (permalink)  
Antiguo 11/01/2009, 00:23
loganazo
 
Fecha de Ingreso: agosto-2008
Mensajes: 4
Antigüedad: 16 años, 4 meses
Puntos: 0
duda con cursor y su ejecucion en pgadmin

hola foro tengo una duda y espero q puedan ayudarme

usando el pgadmin III version 1.6.3

creo la sgte funcion que me devuelve un cursor...

CREATE OR REPLACE FUNCTION listar_empleado(a refcursor)
RETURNS refcursor AS
$BODY$begin
open $1 for select * from empleado;
return $1;
end;$BODY$
LANGUAGE 'plpgsql' VOLATILE;

luego la ejecuto asi en el sql del pgadmin


begin;
select listar_empleado('a');
fetch all in a;


y bueno la primera vez (y las veces impares) me resulta perfectamente

"15.003.619-4";"jose";"mura";"calle sexta";235677;0;1;6;1985;"disponible";"vina"

(esta es solo una tupla de la tabla, pero me devuelve las 8)


ahora el problema es si la vuelvo a ejecutar ,me sale este mensaje

WARNING: ya hay una transacción en curso

ERROR: cursor "a" already in use
SQL state: 42P03
Context: PL/pgSQL function "listar_empleado" line 2 at open


se q el cursor queda abierto, y que debo cerrarlo pero donde ??
si coloco dentro de la funcion despues del return $1;
close $1; sigue apareciendo el mismo error, si coloco el close en el bloque asi

begin;
select listar_empleado('a');
fetch all in a;
close a;

me tira el sgte mensaje

Query result with 8 rows discarded.

Query returned successfully with no result in 509 ms.

y de ahi surge mi otra pregunta es posible crear la funcion y ejecutar el bloque en una sola linea, o sea es decir (comomis funciones de insertar y actualizar) llamarlas solamente con el select y se ejecute inmediatamente la funcion??

epero no haberles dado la lata agradeciendo de antemano..