CREATE FUNCTION myfunc(variadic ref refcursor[]) RETURNS SETOF refcursor AS $ begin open ref[1] for select * from pg_class; return next ref[1]; open ref[2] for select * from pg_class; return next ref[2]; end; $ lANGUAGE plpgsql;
There is a workaround
CREATE FUNCTION myfunc(variadic ref refcursor[]) RETURNS SETOF refcursor AS $$ declare r refcursor; begin r = ref[1]; open r for select * from pg_class; return next ref[1]; r = ref[2]; open r for select * from pg_class; return next ref[2]; end; $$ lANGUAGE plpgsql;
Personally, I have not any idea what do you do. Maybe a C extension can works better for you - PLpgSQL is static strict language. When you use too dynamic code, the result can be hardly maintainable.