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..