以Sergey为例,https://stackoverflow.com/a/60834163/1513027
我试图创建一个匿名DO块而不是函数。
如果我在块中有FETCH,它会给出一个语法错误,可能需要一个INTO子句,并且游标的名称是否在引号中并不重要。
DO
$$
DECLARE _query TEXT;
DECLARE _cursor CONSTANT refcursor := _cursor;
BEGIN
_query := 'select "Port", "Version", "AddDate" from "LatestLogEntry";';
OPEN _cursor FOR EXECUTE _query;
FETCH ALL FROM _cursor; -- syntax error at ;
END
$$;
如果我把它放在外面,就像Sergey的例子一样,那么它就看不到在块内部声明的游标,而且游标的名字是否用引号括起来也很重要。
DO
$$
DECLARE _query TEXT;
DECLARE _cursor CONSTANT refcursor := '_cursor';
BEGIN
_query := 'select "Port", "Version", "AddDate" from "LatestLogEntry";';
OPEN _cursor FOR EXECUTE _query;
END
$$;
FETCH ALL FROM _cursor -- ERROR: cursor "_cursor" does not exist
2条答案
按热度按时间u1ehiz5o1#
答案隐藏在其中一个示例的注解中。
--需要在事务中才能使用游标。
将其 Package 在事务中是有效的。
9gm1akwq2#
在pgadmin中,此操作有效,请参见下面的屏幕,运行postgres 15
正如Sergey所指出的,这必须在事务中进行,否则您将得到错误消息。
你可以试着把它用在