In postgreSQL habe ich erfolgreich eine Funktion erstellt, die einen Refcursor zurückgibt, wobei in einem zweiten Schritt alle Zeilen abgerufen werden können.Ansicht erstellen, indem alle Zeilen abgerufen werden (Aufruf einer Funktion, die einen Cursor zurückgibt)
Ich möchte eine Sicht mit den Datensätzen erstellen, die von der Funktion zurückgegeben werden, aber ich kann nicht herausfinden, wie dies (wenn überhaupt) erreicht werden konnte, da die SELECT
Anweisung nur den Cursor, aber nicht die Datensätze zurückgibt. Diese müssen mit FETCH ALL FROM
abgerufen werden.
Dies ist die Funktion (es ist im Grunde eine Modifikation von dem, was in this blog post erklärt):
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;
ich meine Daten anschließend ausführen:
BEGIN;
SELECT do_cross_cursor();
FETCH ALL FROM result;
END;
In es eine Möglichkeit, FETCH ALL FROM result;
zu lassen in eine Ansicht fließen?
Ich bin hübsch Sie können das nicht tun. Die Sicht, die sich ergeben würde, hätte eine variable/dynamische Anzahl von Spalten basierend auf dem, was "gekreuzt" wurde, und die Daten in der Tabelle für dieses bestimmte gekreuzte Feld, so dass die resultierende Menge von Daten ein dynamisches Schema hat. Gut für einen Cursor, nicht so für eine Ansicht. – JNevill