DO Befehl vs. PL/pgSQL-Funktion
Das DO Befehl gibt keine Zeilen zurück. Sie können NOTICES senden oder RAISE andere Nachrichten (mit Sprache plpgsql) oder Sie können in eine (temporäre) Tabelle schreiben und später SELECT davon ab, um dies zu umgehen.
Aber wirklich, erstellen Sie stattdessen eine (plpgsql)-Funktion, in der Sie einen Rückgabetyp mit RETURNS definieren können -Klausel oder OUT / INOUT Parameter und Rückkehr von der Funktion auf verschiedene Weise.
Wenn Sie nicht möchten, dass eine Funktion gespeichert und für andere Verbindungen sichtbar ist, ziehen Sie eine "temporäre" Funktion in Betracht, die eine undokumentierte, aber gut etablierte Funktion ist:
- Wie erstelle ich eine temporäre Funktion in PostgreSQL?
generate_series() für das vorliegende Problem
Für das vorliegende Problem scheinen Sie keine zu benötigen von diesem. Verwenden Sie stattdessen diese einfache Abfrage:
SELECT row_number() OVER () AS running_month
, extract('year' FROM m) AS year
, extract('month' FROM m) AS month
FROM generate_series(timestamp '2012-04-01'
, timestamp '2016-01-01'
, interval '1 month') m;
db<>hier fummeln
Warum?
- Generieren von Zeitreihen zwischen zwei Daten in PostgreSQL