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

Comment utiliser `RETURN NEXT` dans PL/pgSQL correctement ?

L'exemple donné peut être entièrement remplacé par RETURN QUERY :

BEGIN
    RETURN QUERY SELECT y_.y, 'hi' FROM generate_series(1,10,1) AS y_(y)
END;

ce qui sera beaucoup plus rapide.

En général, évitez autant que possible les itérations et privilégiez plutôt les opérations orientées ensemble.

return next sur une boucle est inévitable (ce qui est très rare et principalement limité au moment où vous avez besoin d'une gestion des exceptions), vous devez définir OUT valeurs de paramètre ou paramètres de table, puis return next sans arguments.

Dans ce cas, votre problème est la ligne SELECT yr.y, 'hi'; qui ne fait rien. Vous supposez que la destination implicite d'un SELECT est les paramètres de sortie, mais ce n'est pas le cas. Vous devrez utiliser les paramètres out comme variables de boucle comme @peterm l'a fait, utiliser des affectations ou utiliser SELECT INTO :

FOR yr IN SELECT * FROM generate_series(1,10,1) AS y_(y) 
LOOP
    RAISE NOTICE 'Computing %', yr.y;
    y := yr.y;
    result := 'hi';
    RETURN NEXT;
END LOOP;
RETURN;