如何从 PL/pgSQL 函数返回的 refcursor 中选择所有行



我有一个返回refcursor的函数some_func() :

CREATE OR REPLACE FUNCTION some_func() RETURNS refcursor AS (...)

我想从控制台调用此函数并显示它返回的游标中的结果集。在甲骨文中,我会这样写:

SELECT * FROM TABLE(some_func());

PosgreSQL上的构造相当于什么?

引用光标由其名称引用,可以是自动生成的,也可以是由您选择的。文档的这一页给出了每个示例。

要从引用游标获取结果,您必须具有游标的名称。在生成名称的情况下,这将是类似于 <unnamed portal 1>" .然后,您可以:

FETCH ALL FROM "<unnamed portal 1>";

游标名称作为refcursor结果从函数返回,因此您可以从那里获取它。

假设你有一个以返回 refcursor 的方式编写的 postgres 函数;

CREATE OR REPLACE FUNCTION "com.mkindika"."myfunction" ("refcursor", other input  parameters) RETURNS "pg_catalog"."refcursor" AS 
$body$
DECLARE
---- query
END;
$body$
LANGUAGE 'plpgsql' STABLE CALLED ON NULL INPUT SECURITY INVOKER;

如果要打印 refcursor,可以使用以下代码行;

BEGIN;
SELECT "com.mkindika"."myfunction" ("refcursor",other input parameters);
FETCH ALL IN "refcursor";

最新更新