在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;
流入视图?
答案 0 :(得分:0)
回答你的问题:不。 view需要定义所有列,并且不能将fetch放入视图定义。但你可以解决方法。像是:
select DISTINCT
pk, jahrmonat,count(1) over (partition by pk,jahrmonat), SUM(wert_monat_kum) AS Total
FROM susa2
应垂直向您提供相同的数据,以便您can try crosstab
将其转换为您的数据集。