首页 文章

从获取所有行创建视图(调用返回游标的函数)

提问于
浏览
1

在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; 流入视图?

1 回答

  • 0

    回答你的问题:没有 . view需要定义所有列,并且不能将fetch放入视图定义 . 但你可以解决方法 . 像:

    select DISTINCT 
    pk, jahrmonat,count(1) over (partition by pk,jahrmonat), SUM(wert_monat_kum) AS Total 
    FROM susa2
    

    应该垂直给你相同的数据,这样你就可以将它转换成你的数据集了 .

相关问题