>
> Esa solución funciona muy bien cuando la función no precisa de parámetros
> de entrada, porque cuando hago lo siguiente:
>
> CREATE FUNCTION eliminar(parametro character varying, refcursor) RETURNS
> refcursor AS '
> declare micursor refcursor;
> BEGIN
> OPEN micursor FOR SELECT * FROM nmusuario;
> RETURN micursor;
> END;
> ' LANGUAGE plpgsql;
>
> -- BEGIN;
> SELECT eliminar('probando','funccursor');
> FETCH ALL IN funccursor;
> -- COMMIT;
>
> me da como error ERROR: cursor "funccursor" does not exist, la verdad es
> que esto se hace muy simple en otros gestores de base de datos, no tengo
> idea de por qué en postgres lo han complicado tanto.
>
Puedes utilizar el tipo de retorno setof record en lugar de refcursor:
CREATE OR REPLACE FUNCTION mi_funcioin(IN id int, OUT campo1 int, OUT campo2
text)
RETURNS SETOF record AS
$BODY$
declare
begin
return query SELECT campo10,campo20 FROM nmusuario where idUsuario =
id;
return;
end;
$BODY$
LANGUAGE 'plpgsql'
----
select * from mi_funcion( 5432 );