PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Wie führe ich eine Auswahlabfrage in einem DO-Block durch?

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