Я хотел бы использовать курсор в функции с именем таблицы в качестве переменной функции, простой пример - запрос выбора через курсор.
Из документации PostgreSQL я обнаружил, что могу использовать
Declare curs3 CURSOR (key integer) FOR SELECT * FROM tenk1 WHERE unique1 = key;
Но при вводе
declare curs1 cursor (key integer) for execute 'select ' || quote_ident(colname) || ' from ' || quote_ident(tablename);
возвращается ERROR: syntax error at or near "'select '"
.
С другой стороны, если я напишу функцию с refcursor
следующим образом:
CREATE or replace FUNCTION cursor_hw(colname text,tablename text) RETURNS setof text AS $$
declare curs1 refcursor;
BEGIN
open curs1 for execute 'select ' || quote_ident(colname) || ' from ' || quote_ident(tablename);
for x in curs1 loop
return next x;
end loop;
END; $$ LANGUAGE plpgsql;
Она вернет [42601] ERROR: cursor FOR loop must use a bound cursor variable
.
Любая помощь будет оценена, большое спасибо!