【发布时间】:2018-12-10 20:55:54
【问题描述】:
我想在函数中使用游标,将表名作为函数变量,一个简单的例子是通过游标进行选择查询。
从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。
任何帮助将不胜感激,非常感谢!
【问题讨论】:
标签: postgresql plpgsql