Re: [BUGS] BUG #14463: refcursor cann't used with array or variadic parameter?
От | Pavel Stehule |
---|---|
Тема | Re: [BUGS] BUG #14463: refcursor cann't used with array or variadic parameter? |
Дата | |
Msg-id | CAFj8pRAO29VqqH13aWK1YPyRiL1VZvdS+uKzFB-S6S20ukgtug@mail.gmail.com обсуждение исходный текст |
Ответ на | [BUGS] BUG #14463: refcursor cann't used with array or variadic parameter? (digoal@126.com) |
Ответы |
Re: [BUGS] BUG #14463: refcursor cann't used with array or variadic parameter?
|
Список | pgsql-bugs |
Hi
It is not a bug - it is feature. PLpgSQL statements doesn't expect a expression on some places.
2016-12-13 16:25 GMT+01:00 <digoal@126.com>:
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;
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.
Regards
Pavel Stehule
В списке pgsql-bugs по дате отправления: