web-dev-qa-db-fra.com

PostgreSQL - Itérer sur les résultats de la requête

Je crée une fonction dans le langage de script pgsql, et ce que je veux faire à ce stade, c'est itérer sur les résultats d'une requête et pour chaque ligne faire quelque chose de spécifique. Mon essai actuel est le suivant, où temprow est déclaré comme temprow user_data.users%rowtype. Le code en question est le suivant:

FOR temprow IN
        SELECT * FROM user_data.users ORDER BY user_seasonpts DESC LIMIT 10
    LOOP
        SELECT user_id,user_seasonpts INTO player_idd,season_ptss FROM temprow;
        INSERT INTO user_data.leaderboards (season_num,player_id,season_pts) VALUES (old_seasonnum,player_idd,season_ptss);
    END LOOP;  

Cependant, j'obtiens l'erreur suivante: ERROR: relation "temprow" does not exist. S'il est clair ce que je veux faire, pourriez-vous me montrer la bonne façon de le faire?

20
Noob Doob

temprow est une variable d'enregistrement qui est liée à son tour à chaque enregistrement du premier SELECT.

Vous devez donc écrire:

FOR temprow IN
        SELECT * FROM user_data.users ORDER BY user_seasonpts DESC LIMIT 10
    LOOP
        INSERT INTO user_data.leaderboards (season_num,player_id,season_pts) VALUES (old_seasonnum,temprow.userd_id,temprow.season_ptss);
    END LOOP;

Cette boucle pourrait être encore simplifiée en une seule requête:

INSERT INTO user_data.leaderboards (season_num,player_id,season_pts)
SELECT old_seasonnum,player_idd,season_ptss FROM user_data.users ORDER BY user_seasonpts DESC LIMIT 10
35
Renzo