我有一个函数some_func()返回refcursor
:
CREATE OR REPLACE FUNCTION some_func() RETURNS refcursor AS (...)
我想从控制台调用此函数,并显示由它返回的游标的结果集。在Oracle中我会写:
SELECT * FROM TABLE(some_func());
PosgreSQL的构造相当于什么?
答案 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";