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