如何获取 PL/pgSQL 个游标?

How to fetch PL/pgSQL cursors?

我正在尝试使用游标获取动态数据:

CREATE FUNCTION myfunc(refcursor, refcursor) RETURNS SETOF refcursor AS $$
BEGIN
    OPEN  FOR SELECT * FROM users;
    RETURN NEXT ;

END;
$$ LANGUAGE plpgsql;


当我尝试获取数据时,我不断收到此错误:“a”不是已知变量??

do $$ begin

SELECT * FROM myfunc('a', 'b');

FETCH ALL FROM a;
COMMIT;
end;

$$

如果您只想从游标中获取数据,则不需要 PL/pgSQL 代码。您只需要一个事务,因为游标的寿命不会比事务长。不要混淆来自 PL/pgSQL 的 BEGIN 和 SQL 中的 BEGIN,后者开始一个代码块:

BEGIN;

SELECT * FROM myfunc('a', 'b');

FETCH ALL FROM a;

COMMIT;