在postgreSQL中,我已成功设法创建一个返回refcursor的函数,在第二步中可以获取所有行 .
我想用函数返回的记录创建一个视图,但我无法弄清楚如何实现这一点(如果有的话),因为 SELECT 语句只返回光标而不是记录 . 这些需要用 FETCH ALL FROM 获取 .
这是函数(它基本上是this blog post中解释的修改):
CREATE OR REPLACE FUNCTION do_cross_cursor()
RETURNS refcursor AS $$
DECLARE
col_list text[] := '{}';
query text;
r RECORD;
result refcursor := 'result';
BEGIN
FOR r IN EXECUTE 'SELECT DISTINCT jahrmonat::text FROM susa2'
LOOP
col_list := array_append(col_list, 'SUM(CASE jahrmonat WHEN'
|| quote_literal(r.jahrmonat) || ' THEN wert_monat_kum'
|| ' ELSE 0 END) AS ' || quote_ident(r.jahrmonat) || '');
END LOOP;
query := 'SELECT pk, '
|| array_to_string(col_list, ',')
|| ', SUM(wert_monat_kum) AS Total FROM susa2 GROUP BY pk';
OPEN result NO SCROLL FOR EXECUTE query;
RETURN result;
END;
$$ LANGUAGE plpgsql STRICT;
我随后执行了以下数据:
BEGIN;
SELECT do_cross_cursor();
FETCH ALL FROM result;
END;
有没有办法让 FETCH ALL FROM result; 流入视图?