我有一个返回的函数 some_func() refcursor
:
CREATE OR REPLACE FUNCTION some_func() RETURNS refcursor AS (...)
我想从控制台调用这个函数并从它返回的光标中显示结果集。在甲骨文我会写:
SELECT * FROM TABLE(some_func());
与 PosgreSQL 上的构造等效的是什么?
我有一个返回的函数 some_func() refcursor
:
CREATE OR REPLACE FUNCTION some_func() RETURNS refcursor AS (...)
我想从控制台调用这个函数并从它返回的光标中显示结果集。在甲骨文我会写:
SELECT * FROM TABLE(some_func());
与 PosgreSQL 上的构造等效的是什么?
refcursor 由其名称引用,可以是自动生成的,也可以由您选择。该文档的此页面为每个示例提供了一个示例。
要从 refcursor 获取结果,您必须具有游标的名称。如果生成的名称类似于<unnamed portal 1>"
. 然后您可以:
FETCH ALL FROM "<unnamed portal 1>";
游标名称作为结果从函数返回refcursor
,因此您可以从那里获取它。
假设您有一个 postgres 函数以返回 refcursor 的方式编写;
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";