PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Comment effectuer une requête select dans un bloc DO ?

DO commande vs fonction PL/pgSQL

Le DO La commande ne renvoie pas de lignes. Vous pouvez envoyer des NOTICES ou RAISE d'autres messages (avec le langage plpgsql) ou vous pouvez écrire dans une table (temporaire) et plus tard SELECT de là pour contourner cela.

Mais vraiment, créez une fonction (plpgsql) à la place, où vous pouvez définir un type de retour avec le RETURNS clause ou OUT / INOUT paramètres et retour de la fonction de différentes manières.

Si vous ne voulez pas qu'une fonction soit enregistrée et visible pour d'autres connexions, envisagez une fonction "temporaire", qui est une fonctionnalité non documentée mais bien établie :

  • Comment créer une fonction temporaire dans PostgreSQL ?

generate_series() pour le problème à portée de main

Pour le problème à résoudre, vous ne semblez pas avoir besoin de tout de cela. Utilisez plutôt cette simple requête :

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<>jouez ici

Pourquoi ?

  • Générer des séries temporelles entre deux dates dans PostgreSQL