我有一个返回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";