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

时间:2012-06-21 10:01:39

标签: postgresql plpgsql

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

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

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

SELECT * FROM TABLE(some_func());

PosgreSQL的构造相当于什么?

2 个答案:

答案 0 :(得分:4)

refcursor由其名称引用,可以由您自动生成或选择。 这个page of the doc为每个人提供了一个例子。

要从refcursor获取结果,您必须具有光标的名称。如果生成的名称类似于<unnamed portal 1>"。然后你可以:

FETCH ALL FROM "<unnamed portal 1>";

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

答案 1 :(得分:0)

假设你有一个以返回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";