Какая версия вашего Postgres? Современный PostgreSQL допускает любое выражение:
do $$
declare s cursor for select * from pg_class;
r record;
i_offset int default 5;
begin
open s;
move forward i_offset in s;
fetch s into r;
raise notice '%', r;
close s;
end;
$$;
NOTICE: (pg_toast_2609,99,11585,0,10,0,2834,0,0,0,0,0,t,f,p,t,3,0,f,f,f,f,f,f,t,n,f,0,561,1,,,)
Возможно, вы используете слишком старую версию PostgreSQL или, возможно, возникла какая-то другая проблема, но команды MOVE
, FETCH
поддерживают выражения, поэтому нет необходимости использовать динамический SQL.